v32 Release Notes
Major Changes
- New WebGL renderer — The entire game now renders on WebGL, which is faster and smoother (especially on big maps with lots of activity). It also comes with a new Graphics Settings modal with a dozen+ options so you can tweak how the game looks to your taste.
- Higher trade-ship cap — Ports now spawn more trade ships before tapering off, so naval trade scales up further with more ports.
- Reserved clan tags — You must now be a member of a clan in order to use its clan tag.
- Clan tags hidden in FFA — Clan tags are now hidden in FFA to help prevent clan teaming.
- No spawn timer in singleplayer — Singleplayer games now start immediately when you choose your spawn.
Renderer & Graphics
- Migrated the entire renderer from canvas2D/Pixi to WebGL and made it the sole renderer — ldlework
- Added a Graphics Settings modal — allowing for a dozen+ different graphics options — Evan
- Added territory image-based skins — Evan
- Added colorblind mode — noahschmal
- Moved the theme system from core to a client-side ThemeProvider — noahschmal
- Returned factory/defence-post radii and railroad highlighting when placing a city/port on top — VariableVince
- Showed the alliance request + duration icon and ally/teammate targets, with optimization — VariableVince
- Moved status icons closer above names with emoji on top — VariableVince
- Displayed player flags next to names again and restored territory skins — VariableVince
- Restored rendering on WebGL context loss — VariableVince
- Improved coordinate grid — FrederikJA
- Stopped trade-friendly ships from rendering as angry red warships — Berk
- Fixed the SAM/factory radius ghost upgrade and added a railroad ghost for factories, syncing factory effective distance and railroad max length — TKTK123456
Performance
- Numerous WebGL renderer performance improvements — Evan
- Major CPU and memory optimizations in the map generator — Alex Jurkiewicz
- Migrated AttackExecution hot loops to
forEachNeighbor— Mike Zaugg - Fixed AStar overflowing the priority queue on twisted paths — Arkadiusz Sygulski
Maps
🗺️ New Maps
- Mississippi River 🇺🇸 — Extremely long vertical river-based meme map (by @RickD004)
- Caribbean 🏖️ — Island-based map with tons of naval trade/warfare (by @RickD004)
- Danish Straits 🇩🇰 — Two landmasses and many islands on a relatively small map (by @RickD004)
- Venice 🛶 — Urban map with a multitude of canals (by @RickD004)
- Juan De Fuca Strait 🐋 — 3-team map based on the strait between Washington and Canada (by @RickD004)
- Northwest Passage 🧊 — Island-based map based on the historic sea route cutting through the Canadian Archipelago (by @RickD004)
- Indian Subcontinent 🇮🇳 — Highly requested map with lots of Indian/Pakistani states as NPCs and rivers (by @RickD004)
- Balkans — Land-based European map with countries as NPCs and additional nations (by @RickD004)
- Middle East 🌴 — Massive highland-based map focused on the most volatile region on earth (by @RickD004)
- Onion 🧅 — Tiny meme map with onion outlines as water and mountainous terrain as the background (by @TKTK123456)
- Yellow Sea 🇨🇳 — Medium-sized sea map with two peninsulas, located between China and Korea (by @crunchybbb2)
- Taiwan Strait 🇹🇼 — 2-team map with two equally sized landmasses (by @crunchybbb2 and @RickD004)
- Korea 🇰🇷 — Peninsula map with Korean provinces as nations (by @crunchybbb2)
- Southeast Asia 🏝️ — Large subcontinental map with islands, landmasses and archipelagos (by @RickD004)
- Hong Kong 🇭🇰 — Large and dense city-themed map with harbors, islands, and 71 district-themed NPCs (by @crunchybbb2)
- Titan 🪐 — Cosmic lake and river system based on Saturn's largest moon (by @RickD004)
- World Inverted 🌎 — Massive map with Earth's oceans becoming land and land becoming sea; filled with tectonic plate boundaries as "rivers" and shipwrecks as NPCs (by @PatrickPlaysBadly)
- Labyrinth 🌀 — Confusing symmetrical maze pattern with water channels and white cross marks (by @PatrickPlaysBadly)
- Chopping Block 🔪 — Unusual pattern inspired by The Box and an inversion of the Sierpinski map (by @PatrickPlaysBadly)
- Warship Warship ⚓ — Meme map with two warship-shaped islands; inspired by Ultimus Rex's memed quote "Warship Warship" (by @crunchybbb2)
Map Improvements & Fixes
- Team Maps Expansion (new team spawnzones), a huge terrain re-make of multiple maps, and new/updated map categories — RickD004
- Rebalanced the Taiwan Strait map — RickD004
- Fixed a river in Balkans not connecting to the sea and the Bosphorus map; QoL for Strait of Malacca — RickD004
- Formatted the map lists in Main and MapPlaylist; standardized map names across info/manifest JSONs — RickD004
- Added flags to nations on Lemnos/Hormuz/Two Lakes; fixed the disconnected Yalu River and a Warship Warship pathfinding bug — crunchybbb
- Updated maps: Dyslexdria and LUNA — Patrick Plays Badly
- Added a Favourite maps tab — bijx
- Added map search — FloPinguin
- Improved MapPlaylist — FloPinguin
- Fixed map land-tile lookup broken by the asset URL migration — FloPinguin
- Code refactor: removed lake tile type from the game — FloPinguin
- Added the Giant World Map to the multiplayer queue after performance improvements — Evan
Nations & Bots
- Allowed mappers to define
additionalNationsand to omit nation coordinates for random spawn — FloPinguin - Better troop management for nations, with follow-up fixes and improvements — FloPinguin
- Fixed nations being blocked by PVP immunity and not spawning with random spawn enabled — FloPinguin
- Fixed nation city farming, reactive defense posts, and nuked-territory capture — FloPinguin
- Fixed nation names with special characters — Katokoda
- Fixed nations not spawning in singleplayer when the player picks spawn too fast — Evan
- Prevented bots from invading/attacking themselves — Berk
Alliances
- Improved alliance extension handling — babyboucher
- Fixed the alliance renewal prompt staying open and the expiration window persisting after expiration — Katokoda
Nukes & Combat
- Rendered nukes smoothly per frame — Evan
- Removed a double
x()dereference in the MIRV separation point calc — Berk - Destroyed defense posts on tile capture instead of downgrading/transferring ownership — Berk
- Fixed warships freezing with no path — Katokoda
Store & Account
- Showed full store item names instead of truncating them — Aotumuri
Clans
- Added clan game history, a clan stats breakdown, and clantag part 1 — ryanbarlow97
- Disabled game buttons for clan tag + username; fixed the clans-UI border and a streamer-mode bug — ryanbarlow97
- Hid clan tags in public FFA games to prevent teaming and hid the clan tab on crazy games — Evan
- Added support for direct clan detail links and made the clan-tag warning clickable — Aotumuri
- Corrected the clan-tag length error message — Berk
Friends & Social
- Added a friends panel with team-grouping hints (extended to the lobby team preview) and put friends on the same team — Evan
- Added FFA collusion warning — a-happy-goose
UI, Events & Notifications
- Added a help notification system to the control panel — FloPinguin
- Filtered actionable events to remove dead requestors — Katokoda
- Added boat ETA calculation and display in AttacksDisplay — a-happy-goose
- Fixed the missing boat sprite icon in the attacks panel — Cameron Clark
- Fixed a malformed flag SVG URL in playerRow — Blake Girardet
- Fixed mobile logo spacing — Aotumuri
- Removed emoji from user settings — Aotumuri
- Added a "go to player on spawn" setting (default on) — FrederikJA
- Added a retaliate keybind — Sky Elder
- Fixed rebound keys — TKTK123456
- Disabled build hotkeys after death — Aotumuri
- Blocked Safari page-level pinch-zoom — Vansh
- Added a per-recipient cooldown to QuickChatExecution — Josh Harris
Lobby & Matchmaking
- Added a spawn phase countdown timer — tnhnblgl
- Added a delayed lobby start timer — FrederikJA
- Removed the spawn timer on singleplayer (kept a static one elsewhere) — Aotumuri / Evan
- Fixed ranked 1v1 requeue opening matchmaking — Aotumuri
Security & Server Stability
- Fixed a critical XSS in NewsModal (GHSA-rpr9-rxv7-x643) — Mehmet KOZAN
- Patched a Desync DoS vulnerability with strict majority consensus — Berk
- Removed duplicate
express.json()middleware (SEC-04) — Berk - Guarded all
ws.send()calls with readyState checks and preventedsendStartGameMsgfrom crashing the server on disconnect — Berk - Added stale-if-error to the app-shell Cache-Control — Josh Harris
Tooling, CI & Repo
- Fixed the GitHub translation key category and restored the dev-only localStorage pattern override — Aotumuri
- Fixed CI test failures from an over-long test — VariableVince
- Silenced a noisy LangSelector "not found" console warning; fixed a websocket error-log typo — Berk
Meta & Misc
- Meta tuning: nuke speed 8 → 10 tiles per tick, trade-ship sigmoid midpoint 200 → 400 — Evan
- Replaced hardcoded defaults and fixed an off-by-one error — babyboucher
- Updated and removed dependencies; removed a leftover optional chain — VariableVince
- Dropped the unused disposer return from
installSafariPinchZoomBlocker— Vansh
Translators
- Arabic🇸🇦: N0ur, Moha & SyntaxPM
- Bengali🇧🇩: sheikh
- Brazilian Portuguese🇧🇷: theskeleton4393 & juliosilvaqwerty5
- Bulgarian🇧🇬: Nikola123 & NewHappyRabbit
- Chinese Simplified🇨🇳: Moki
- Chinese Traditional🇨🇳: SkiRhino
- Czech🇨🇿: Xaelor, erinthegirl & Matoada
- Danish🇩🇰: NiclasWK
- Dutch🇳🇱: cldprv, tryout33 & Zjefken
- Esperanto: r3ms & Katokoda
- Estonian🇪🇪: ramon.o
- Finnish🇫🇮: Tanepro193
- French🇫🇷: cldprv, gx21, r3ms & Eiwalis
- Galician: toldinsound
- German🇩🇪: Pilkey, jacks0n, floriankilian, Fibig & TNB
- German🇨🇭: originaloha
- Greek🇬🇷: pantelispantelidis
- Hungarian🇭🇺: ap.ms
- Hebrew🇮🇱: Goblinon
- Hindi🇮🇳: sheikh
- Italian🇮🇹: frappa10 & Lollosean
- Indonesian🇮🇩: tronsar
- Japanese🇯🇵: Aotumuri, daimyo_panda2, gafunuko, kaywb & aki__san__
- Korean🇰🇷: Jinyoon
- Macedonian🇲🇰: Perdiccas
- Polish🇵🇱: zibi, RinkyDinky, Rulfam & krissutonieja
- Persian🇮🇷: nobodyiran
- Russian🇷🇺: Rulfam & Redincon
- Serbo-Croatian🇷🇸🇭🇷🇧🇦🇲🇪: Vekser
- Slovak🇸🇰: extraextra
- Slovenian🇸🇮: MotivatedMonkey
- Spanish🇪🇸: 6uzm4n
- Swedish🇸🇪: Moha, theangel2 & Keevee
- Toki Pona: Makonede
- Turkish🇹🇷: Toyatak & grassified
- Ukrainian🇺🇦: Rulfam