github openfrontio/OpenFrontIO v0.35.0-beta1

3 hours ago

v0.35.0

Overview

Player levels & progression
Every game now earns XP, revealed source by source on the end-of-game screen (with a provisional figure the moment you're out, so you don't have to wait for the game to end). Level badges show in the lobby, the in-game player panel, the ranked leaderboard and clan lists. Hit level 100 and you can Prestige, up to P10 and then Legend. Profiles get a card, a Progression tab, a reward track with Plutonium every 25 levels, and share links. You can hide your level and keep your profile out of search engines from Account Settings.

Ranked FFA and clan wars
Two new ranked queues: Free For All (4–10 players matched by ELO, last player standing wins) and Clan Wars (your clan vs. up to three others, 2–5 a side, the clan gains or loses rating). Ranked now needs a trusted account, and the clan leaderboard gets an ELO column.

Replay viewer
Replays can seek. The game is processed once in your browser, then any point on the timeline is a ~20 ms jump. Finished games open in the viewer from the game history.

Smarter nations
Nations play more like the humans who win: they save later and keep building, fortify borders before attacking, send 1% beachhead boats and follow up by land, defend against landings, retaliate properly, aim nukes at land instead of water and fallout, nuke back, and in FFA gang up on a runaway leader. Easy nations keep their old behaviour.

Faster chat and emoji
R opens quick chat on the player under your cursor and one click sends a phrase. F opens a redesigned, grouped emoji menu with a Favorites row you fill by drag and drop and fire with Q W E A S D. The top player panel gets chat, emoji, alliance (K/L), target (N) and boat (B) buttons. Note: select-all-warships moves from F to X.

Nukes annex again
Nuking an arm off someone's territory hands the cut-off piece to the surrounding enemy again. It had quietly stopped working for most coastal empires.

Bigger lobbies
The 125-player cap is gone. Lobby size now comes from the map, so The Box fits 210, Alps 185 and Middle East 170.

New maps
Madagascar (a Baikal-style Nuke Wars map), Horn of Africa, Vancouver Island, Cape of Good Hope, Canary Islands, Bab el-Mandeb Strait, Rio de Janeiro and Pulicat Lake.

Faster homepage
The homepage's first download is a third of what it was (661 KB → 220 KB gzipped). The game client, store and every modal load on demand.

Gameplay & Balance

  • Removed the 125 player cap from public lobbies; size now comes from the map's land, and Alps and The Box appear more often — FloPinguin
  • Annex land a nuke cuts off from the main body; this had stopped working whenever the main body touched the coast — Lewis
  • Closed an exploit where attacking something you couldn't reach refunded troops for free, letting a script build troops to 10× the cap — Evan
  • Closed an exploit where the first voter could forge every player's end-of-game stats by naming the majority's winner — Evan
  • Disputed winner votes are now settled by replaying the game on the server and archiving the simulation's result — Evan
  • Games decided by a single voter are checked by the replay instead of trusted — Lewis
  • Humans can send up to 5 emojis per recipient per 5 s (was 1) — Evan
  • Dropped attacks with an invalid troop count instead of kicking the player; about 50 players a day were losing their game to it — Evan
  • Each player's spawn tile is recorded in their stats, for future per-map spawn heatmaps — Lewis

Nations

  • Nations play more like winning humans: later saving, continuous building, defense posts behind the front, bots annexed by walling them in, nukes on bordering rivals and nuking back, MIRVs on reachable targets, and team nations backing up teammates — FloPinguin
  • Smarter nukes: no two nations nuke the same spot, no blasts wasted on water or fallout, atom bombs on small islands, collateral on non-allies in FFA, never own or allied enclaves — FloPinguin
  • 1% beachhead boats on Hard and Impossible, followed by a land attack the tick they land; Medium and up stop saving for nukes before three cities — FloPinguin
  • Retaliation, naval warfare and pressure on a runaway FFA leader: nations answer attacks before saving, route boats around warships, send warship squads at blockades, and don't sail past 300/500 tiles — FloPinguin
  • Nations defend against boat landings at the beachhead and stop stacking defense posts on top of each other — FloPinguin
  • Nations keep donating troops to fighting teammates after the game is decided, celebrate wins with an emoji, and only one nation mocks a traitor instead of all twenty — FloPinguin

Ranked & Clans

  • Ranked Free For All: 4–10 players matched by ELO, continent maps, 20 minute timer, ends when one human is left — Evan
  • Ranked Clan Wars: clan-sized team games, 2–5 a side, up to four clans, rated per clan — Evan
  • Ranked is limited to trusted accounts, with lock icons on the Ranked button and modal — Evan
  • Clan leaderboard gets a sortable ELO column — Evan
  • Clan browser: a fair per-player random order by default (no more "AAA" clans at the top), sort options, and paid clan boosts for featured placement — Lewis
  • Clan tags come from the clan wars assignment — Evan
  • Ranked alert redesign — cazlabIO

Levels & Progression

  • Player levels: a level badge across the UI and an XP reveal on the end-of-game screen, source by source, with level-ups — Lewis
  • A provisional XP figure the moment you're out, reconciled with the server's when the game ends — Lewis
  • Profile cards, and the prestige flow at level 100: a hold-to-confirm screen and a full-screen ceremony, P1 to P10 then Legend — Lewis
  • Progression tab, reward track, profile links and sharing, and end-of-game rewards — Lewis
  • Level badges in the lobby list, in-game player panel, ranked leaderboard (prestiged players and Legends only) and clan member lists — Lewis
  • Privacy settings: hide your level from other players, and keep your profile out of search engines — Lewis
  • Level Plutonium is held until your account is trusted, and the rewards list says so — Lewis

Lobby & Social

  • Quick chat: R opens it for the player under your cursor, phrases are one-click chips grouped by category, and phrases that name a player open a ranked picker — Evan
  • Emoji menu redesign: grouped sections, a Favorites row with Q W E A S D hotkeys, F to open, and batch sending — Evan
  • Player panel shortcuts: Send/Break alliance (K/L), Target (N) and Boat attack (B), each shown only when it applies — Evan
  • Eight new quick chat phrases ("Betray [P1]!", "Build SAMs!", "Send gold to [P1]!", …) plus "Attack the crown!" — Lewis, Evan
  • See what a player is wearing in their info panel, with store links for anything you don't own — CodingSelim
  • Hosts can set a player limit (2–1000) on an unlisted private lobby — Lewis
  • A larger map preview and compact setting tags in the lobby waiting view — Gio Marco Baglioni
  • Duos / Trios / Quads labels are back, and the same lobby reads the same everywhere — FloPinguin
  • Fixed the team name being untranslated in the win message — VariableVince
  • Fixed quick chat keeping a stale player selected when switching phrases — LoSt543215543
  • Alliance request confirmations keep the clan tag in the name — LoSt543215543
  • Fixed Alt+click on an emoji sending it to whoever was under the cursor — LoSt543215543
  • Fixed double colons on localized lobby badges in CJK languages — LoSt543215543
  • Centred the kick button icon in the lobby player list — LoSt543215543

Replays

  • A replay viewer that can seek: processed once in your browser, ~20 ms per seek, verified against the hashes the live clients recorded — ArtZab0
  • Viewer follow-ups: playback keys ignored behind settings, no event flood when switching followed players, unverified replays flagged, backward seek fixes gold/s — ArtZab0
  • Game state snapshots: the whole simulation can be saved at any tick and restored with identical hashes, for pause/resume, forks and replay seeking — Evan

Graphics, UI & Quality of Life

  • Halloween homepage theme: orange and purple, pumpkin cursors, a blood moon on the map cards (homepage only, never in game) — Restart
  • Drag to dismiss in-game toasts, which matters on phones where a long error covered the map — MRGhust
  • The structure preview now sits where the building will actually go when you're placing it near another — MRGhust
  • Mobile attack ratio control shows the troop count, not just the percentage — Kinatic11
  • Arrow and zoom keys are now real keybinds, so assigning them elsewhere no longer fires both actions — VariableVince
  • Fixed Escape closing the whole Settings modal when cancelling a keybind capture — LoSt543215543
  • Fixed Mac Ctrl+click opening the radial menu and attacking at the same time — devynlynch
  • Fixed a soft-lock where clicking a build icon opened the radial menu over the HUD — torturado
  • Fixed a crash when releasing a build just past the map edge — Evan
  • Signed-out players are told how to get skins, crowns and effects in the inventory — MRGhust
  • Localized unit names in "missile intercepted" and "unit destroyed" events — Aotumuri
  • Cosmetic and currency pack names are capitalized in the store — LoSt543215543
  • Tutorial gives a general reason to ally ("Allies secure your borders") — FloPinguin
  • Steam prompts say "Buy on Steam" — LoSt543215543
  • Translation updates (mls v5.17–v5.18) — Aotumuri

Maps

  • Madagascar: a dedicated Nuke Wars map, two equal landmasses across the Mozambique Channel, set in the 80s — RickD004
  • Horn of Africa: a pirating chokepoint off Somalia and an inner water system from the Nile to Lake Victoria — RickD004
  • Vancouver Island: 30+ nations from the Pacific Northwest — RickD004
  • Cape of Good Hope: a large bay with one chokepoint, plus historical South African flags — RickD004
  • Canary Islands: an island map with shortened crossings, high in team rotation — RickD004
  • Bab el-Mandeb Strait: a balanced two-team map set in the early 1960s, with the region's flags — RickD004
  • Rio de Janeiro: Guanabara Bay, 30 nations from Rio's neighbourhoods and municipalities — Renan Scarpin
  • Pulicat Lake: a lagoon with a single sea entrance, and a pirate island in the door — Panindhra Tallapudi
  • Better terrain for Pulicat Lake — RickD004
  • Took v34 maps out of the New category, and lowered Channel Islands' FFA rotation — RickD004
  • Map layers ship as lossy WebP, ~9× smaller, with a Compact variant — Josh
  • Map generator: crop layer PNGs to the map size like the terrain — FloPinguin

Performance

  • The game client loads on demand instead of with the homepage: first download 661 KB → 434 KB gzipped — Evan
  • Homepage modals, the store, the lobby modals, menu audio and news renderer load on demand: 434 KB → 220 KB gzipped — Evan
  • Replay processing runs on the engine's own worker; the replay worker shrinks from 815 KB to 340 KB — Evan
  • Fixed the largest client exception in prod (24% of Firefox sessions) in stylesheet loading — Evan
  • Fixed PWA icons 404ing on every page load — Evan
  • Telemetry events are serialized once instead of three times — youtsuho

Steam & Desktop

  • Boot prompts (claim your username, Steam notices) are only counted once you answer them, so a content update mid-prompt doesn't spend your one showing — Josh
  • Admin-granted subscriptions are told apart from a Steam month, so a comped player isn't told their access came with a Steam purchase — Lewis
  • The menu theme no longer starts over the gameplay track when a game starts before the audio chunk loads — Josh

Server, Infra & Tooling

  • Split src/core into @openfront/engine, engine-api, engine-lib and shared packages, with a boundary test that enforces the import graph — Evan
  • Sealed the engine: maps passed in, no fetch, type-checked against only the host APIs it may use, and the approximable Math functions banned — Evan
  • Milestone backports: merged PRs with a vNN milestone are cherry-picked onto the release branch, with Claude resolving conflicts, checks before they land, and Slack notifications — Evan, Josh
  • /release skill for cutting patch releases — Evan
  • Shader errors name the program and GPU, so Android link failures can be traced — Evan
  • Accepted the API's degraded join-verify verdict instead of logging it as an error — Evan
  • The lobby feed no longer dials the replay host (140k 404s a day) — Evan
  • Identity token sites are loaded from the API, and documented in API.md — Evan
  • Accept unknown ranked types in the profile stats tree — Evan
  • Updated CLAUDE.md and the run-openfront skill to match the code — FloPinguin
  • Vitest suite for the client Utils helpers — LoSt543215543

Translators

TODO: pull the v35 translator credits from Crowdin (the per-language list can't be derived from git history).

Contributors

v35 took 20 people. Code, maps, perf, translations, the lot. Thank you:

Aotumuri · ArtZab0 · cazlabIO · CodingSelim · devynlynch · Evan · FloPinguin · Gio Marco Baglioni · Josh · Kinatic11 · Lewis · LoSt543215543 · MRGhust · Panindhra Tallapudi · Renan Scarpin · Restart · RickD004 · torturado · VariableVince · youtsuho

Don't miss a new OpenFrontIO release

NewReleases is sending notifications on new releases.