The server sent the whole army on every snapshot and the client re-cloned
the whole icon layer whenever a unit moved, so a settled world with a
standing army drained the broadcast loop and the frame loop alike.
- Ship only the units and city list that changed, keyed by a per-peer
fingerprint and a serialised hash, and merge those deltas on the client.
- Memoise the battlefield scan on a battle version bumped when a unit
joins, leaves or changes side.
- Skip the DOM writes for units whose snapshot object is unchanged, and
cache the unit-view inner nodes.
- Fold units, cities and tile markers onto the nearest world copy instead
of mirroring the icon layers, which re-cloned thousands of views every
frame; the small decoration layers still mirror, and only on a change.
Frame work at full zoom-out with units moving fell from ~190ms to ~6.5ms.
- The bombardment overlay was rebuilt every animation frame, and each barrage
scanned the whole army to find its target (O(strikes x units)). It now
redraws at most at the renderer's 24 fps, reuses its SVG/DOM nodes, and
resolves garrisons from one per-snapshot tile index, so a high-refresh
display no longer makes a big battle worse.
- Route truncation had the same shape: every step of every route rescanned
every unit. The snapshot now buckets the army by tile once.
- Idle units no longer have identical left/top rewritten every frame, and the
whole-map fog buffer is rebuilt less often.
- Snapshot traffic: cityStats and visible are delta-encoded like territory and
population, city stats carry a content-hash version, tile ethnicity is
memoised, and a city's economy is derived once per broadcast instead of
twice. A per-peer civ change now forces a full snapshot, since the visible
set is per-viewer.
- Tile improvements (fortifications, radar towers, coastal cannons), trenches,
zone of control, support-unit capture and launch transports, with parabolic
barrage arcs drawn between attacker and target.
- Focused research that pours points straight into the chosen technology, with
per-technology progress kept when the focus changes, plus repeatable levels.
- Popularity reworked to integer points, war and pillage effects, minority
policies and month-over-month arrows on the nation summary.
- City progress bars, square improvement buttons, a technology tab of wide
short cards with progress bars, transport cargo readout and double-click to
open a city panel.
- a strike is accepted only when the whole round trip (out to the target, then
home to a friendly airport) fits the remaining fuel, and the browser mirrors
the check so an unreachable target is refused with its distance and the
plane's effective range
- a bomber that bombs between hourly ticks turns for home at once instead of
idling and crashing on an empty tank; a plane with a runway lands on fumes
- aircraft may now target a garrison inside a hostile city: they bomb it and
turn away, and captures skip aircraft so the city is never taken
- bomber/jet endurance and mission-range tuning
- aircraft attack orders fly a sortie to the target, bomb once, return to a
friendly airport and re-arm (two-day cooldown, charged per aircraft); rebasing
is bounded by fuel rather than the 10-tile combat radius
- artillery and warships open a sustained hourly bombardment on a standing
target, drawn as a red dashed line and ring while either endpoint is selected
- a game launched from localhost can enable a testing mode whose train and build
rows offer free, instant orders; the server only honours them for a loopback
admin in a testing game
- an open city panel now unlocks aircraft as soon as an airport finishes
Roads are pre-generated between cities with a greedy geometric spanner and flatten unit movement cost. City improvements now only affect the tiles their region controls, with per-region tax collection and a Cities tab. The budget is a grouped, scrollable table with 25%/year tax and a 10%-of-GDP opening treasury. Also merged the tile info into the city panel, kept conflict and budget expansion state across snapshots, added join notifications, filled border corners, drew battle sides as stacks and made tab overflow scroll.