Food0
Wood0
Gold0
Stone0
Pop0/0
Idle0
Dark Age 00:00
Workers
Production
No active queues
Tavern Tales · Campaign Chronicle

Tavern Tales · Strategy Lab

Petit Empire

Craft Your Realm
◆ ⚔ ◆

A compact one-file real-time strategy experiment from the Tavern Tales workshop. Gather four resources, grow a settlement through four ages, command distinct unit classes and break the opposing town. Raise walls and gates, shelter your people, work fields around your mills, trade at the market, and pick how the war is decided — by conquest, by sacking the capital, by a Wonder held against the world, or by one King's life. Procedural seeds keep each battlefield replayable while balanced local starts preserve a fair opening as spawn positions vary naturally from seed to seed.

v2.21 · Steady HandsTouch controlsBeta feedbackRebindable camera41 sprites · Living sails & seaClassic view available
Controls & keys
Left drag select units
Right click move, gather, attack
WASD / arrows / edge scroll camera
Wheel zoom
Shift add selection / queue production / append unit orders
Ctrl+1–9 control group
A attack-move   S stop
Patrol route loop   Guard follow/protect ally
Stance aggressive / defensive / hold / passive
O formation: box / line / screen / spread / free
B C G T send villagers to food / wood / gold / stone
Workers lower HUD shows F/W/G/S · click a resource to select that trade
Market trade resources for gold · prices move as you trade
Victory conquest · capital · wonder · regicide · total
. cycle idle villagers · click Idle in HUD
Production lower HUD shows active queues across your town
Hover any unit or building card for its statistics and what it counters
Personality Warlord rushes · Castellan walls · Steward booms
H jump to Town Center
Fortify drag to lay a wall line   Shift keep laying
Right click a tower / keep / Town Center to garrison
Q town bell: shelter villagers, ring again to release
Farms one farmer each, walkable, built around a Mill
Holdouts click the counter to jump to the last enemy
Esc cancel   Space pause
Touch PAN / BOX / CMD beside the map · hold for the other action
Two fingers pan and pinch to zoom   ☰ saves, settings, fullscreen

Petit Empire · Development Journal

Roadmap companion · notes, interface preferences and saves are stored locally in this browser

Current build · v2.21 — Steady Hands

  • One build again. Two branches grew from 2.19.1 at the same time: First Muster (the beta feedback) and In Your Hands (touch and small screens). 2.21 carries both, in full: everything listed in the two sections below is in this file.
  • Edge scrolling knows what touched it. The wide edge band is for a mouse only. On a phone it is off, as before; on a touch laptop or a pen tablet the last finger or pen stroke no longer drifts the camera against the border.
  • HUD size and the phone layout. The 125 % default and the 200 % ceiling apply to the full desktop HUD. The folded phone/tablet layout keeps the size it was measured at, so its controls stay where the thumb expects them.
  • Back to the Chronicle sits below the top bar whatever its height and clear of the notch.
  • Saves. Schema 8 is unchanged: campaigns from 2.19.1, 2.20a or 2.20b load in 2.21.

Previous build · v2.20a — First Muster (beta feedback, desktop branch)

  • Camera. Edge scrolling now reacts in a 28–64 px band over the map (speed ramps towards the border) instead of a 6 px strip; over the HUD only the true screen border scrolls. New Camera keys panel in Settings: QWERTY / AZERTY (ZQSD) / QWERTZ presets or bind each direction yourself. Arrow keys always work. A key bound to the camera no longer triggers the town bell or other global shortcuts.
  • HUD. Default size is now 125 % and the slider goes up to 200 %.
  • Reach preview. Placing a Mill or Town Center shows the farm ring; placing a Watch Tower, Castle or Town Center shows its attack range (plus vision for towers), with your existing defences drawn faintly for coverage.
  • Farm zones overlap. Two mills side by side form one continuous field zone: a farm may straddle both rings.
  • Trees. Each tree holds 130–300 wood (big trees rarer) and is drawn larger or smaller accordingly; it still shrinks as it is cut. Mirrored trees and both opening woods get identical values.
  • Sea life. Fish and pearl beds keep their last pose when they leave the light instead of snapping back. Fish turn 30 % faster; the pearl tide is 30 % stronger. Scouts gallop 30 % slower.
  • Fair route audit. After generation, a search finds the land route between the bases that crosses the fewest trees. If more than three trees (or any mine/bush) block it, exactly those tiles and their mirror images are cleared, following existing clearings rather than cutting a straight road.
  • End of match. The whole map is revealed; "Inspect battlefield" now has a button back to the Chronicle.
  • Port. Villagers can drop off food at a Port, but no longer gold, wood or stone. Ships still unload all sea cargo there.
  • Defences rebalanced. Every two garrisoned units add one arrow, capped at +2 (tower), +3 (Town Center), +4 (castle); extra arrows hit at 40 %, Arrow Slits +1; volleys every 2 s (castle 2.2 s). Watch Tower 750 HP / 7 attack; Castle attack 11. New tower upgrades: Guard Tower (Castle Age, +2 attack, +25 % HP) and Keep (Imperial Age, +2 attack, +1 range, +25 % HP).

Previous build · v2.20b — In Your Hands (touch branch)

  • The same game, played with a thumb. Nothing in the simulation, the balance, the opponent or the save format has moved: a campaign started in 2.19.1 continues in 2.20, and a desktop in a full-size window sees the interface it saw before, measured element by element against the published build.
  • Three ways to hold the map, named on screen. A column beside the map says which one is live. In PAN a finger drags the country and a tap picks up whatever it lands on; in BOX the same finger draws a selection across an army; in CMD a tap is the order — move, gather, attack, build, repair, garrison. The one that is not the current mode is always a press away: holding a spot does the other thing, which is how a hand gets the second mouse button back.
  • Two fingers are the camera. Move and pinch to pan and zoom together, in every mode, so looking around never costs you the mode you were in. Edge scrolling stays with the mouse: a finger leaves the cursor wherever it last touched, and a camera that drifts because of that is not a feature.
  • A modifier key that stays down. There is no Shift on a phone, so ⇧ latches until it is tapped off: queue five villagers, add to a selection, append orders, keep laying a wall. It reaches the command cards too — the click a browser makes after a tap always says shiftKey false, so the tap is answered directly instead.
  • A card explains itself when held. Hover is the one thing a finger cannot do, and it was carrying every statistic in the game. Hold a command card and its numbers appear, and the card does not fire; tap it and it does. The panel is a caption, not a control: it lets touches through to the map underneath and clears itself after a few seconds.
  • The interface folds for a small screen. The resource strip loses its labels where a coloured dot already says which is which; the eight top-bar buttons become a menu, with fullscreen and this panel added; the HUD stacks, the command grid scrolls, and the minimap leaves the bar to float in a corner. The controls are anchored to the band the HUD is allowed to occupy rather than to the height it happens to have, so they never move out from under the thumb.
  • The first screen ends with the button that starts the game. The setup card is a viewport and a half long on a phone and Start sat at the bottom of it. Start and Continue are pinned to the bottom of the screen while the card scrolls behind them, and the twenty-line key list folds away.
  • Checked on the devices, not on a resized desktop. Emulated phone, small phone, phone held sideways and a tablet, driven with real touch events: taps, drags, holds, two fingers and pinches. Selection, orders, wall lines, building placement, production, the sprite atelier, the settings room and save-reload-continue all pass; so does a side-by-side measurement of the desktop layout and of the world a given seed builds, against the published 2.19.1.

Previous build · v2.19.1 — A Gentle Wind

  • A softer sail. Wind-driven billow is reduced by 65% on all three ships. Fixed yards and masts retain their span, and the existing movement/stop transition stays gentle.
  • Sails catch the wind. The three existing hulls keep their size and facing. Wooden yards, rigging, cream canvas and a small mast cap sit above the deck. The fishing boat opens a lateen sail sideways; the transport and galley billow toward the bow. Actual movement fills the sail; slowing or stopping lets it relax.
  • A quiet, living sea. Eight fish circle clockwise as one slow spiral, taking two minutes per turn. Pearl beds breathe through a gentle 13.5-second tide: slightly smaller and dimmer below the surface. Sparse ripples fade in and out over open water and along visible shores, with softer moving wakes.
  • Calm when needed. Sea animations can be turned off in Settings. Distant views and large populations omit ambient detail; sails still show whether the ship is moving. Water textures, minimap and fog keep their existing rules. Motion pauses with the game.
  • Skins remain yours. The atelier offers an opt-in animated sail for a hull-only ship PNG. Imported replacement artwork keeps its own silhouette unless enabled; size, anchor, rotation and team colours also apply to the rigging. The separate graphics pack includes hulls, sail layers, complete ship frames, fish, pearls and ripple strips.
  • Built directly on Nothing Hides. The six maps, island generation, garrison-click fix, replay-cache reset, setup hints and AI town-placement safeguard remain intact. This pass changes rendering and preferences; ship speed, combat, fishing, boarding, navigation and save schema 8 are unchanged.

Previous build · v2.18 — Nothing Hides

  • A garrison tag ejects its soldier on the first click. The selection panel rewrote its own contents five times a second whether anything had changed or not, and every rewrite destroyed the tags. A click only fires when the press and the release land on the same element, so a hand — which hovers, presses, and lets go over about half a second — lost the click almost every time; a synthetic instant click did not, which is why no test had caught it. Measured at human speed: ten clicks, ten misses before, ten hits after. The panel now repaints only when its markup actually differs, and the tags act on the press, so a repaint during a click can no longer swallow it.
  • Every choice on the opening screen explains itself. The map type was the only one that did. Hover a map size, an opponent, a personality, a victory condition, the seed field or any of the buttons, and the panel under the row says what it means; leave the row and it returns to the country you have chosen. The text is not written twice — difficulty, personality, victory and map all read the same tables the simulation reads, so tuning a number cannot leave a lie on the screen. The panel has a fixed height on purpose: one that grew with its text would move every control on the card each time the cursor crossed an option.
  • The figures on that screen are measured. Map size quotes what five Continental seeds at each size actually produced — about 680, 1,600 and 2,400 resource nodes, and towns 47, 57 and 93 tiles apart. Difficulty quotes what the opponent is actually given: Ruthless gathers 15% faster because its multiplier is 1.15.
  • The same seed replays identically again — and the reason was not the simulation. Two cold sessions had always agreed; it was the second match in one session that differed. Nothing reset the caches that hold entity references, and entity ids restart at 1 with every match, so the tally of who is already working which tree answered questions about the previous game's world under names the new one now carried. Every such cache is emptied before the new world is built, and the guard now replays a seed after a full match has been played, which is the case that was broken.
  • The opponent stops building itself in. Restoring the replay uncovered a town sealed into fifty-three tiles. The wall ring was not the cage: of the eighty edges around the pocket, forty were its own houses and not one was a wall. The old placement test was local — leave two free tiles above or below — and a ring of buildings that each pass it still closes. A candidate site is now checked for whether the Town Center can still reach open country, by a flood capped at 260 tiles so the cost cannot grow with the map. Across nine ten-minute games at three personalities the opponent built exactly what it built before, to the building: the check is inert until it is needed.
  • Six carried defects remain, named in the roadmap, down from seven. Each has a guard that fails, so none of them can be quietly forgotten.

Previous build · v2.17 — Islands and Sails

  • The archipelago is an archipelago now. Thresholding noise gives blobs of land and water in equal measure, which reads as ponds in a meadow — the play-test called it exactly that. The sea is the background here instead: the map starts as open water and islands are stamped into it, coastlines pushed around by the same noise, sized from what a town actually needs rather than from taste. Eighty per cent water, a dozen islands, and one home island per player which is the same island mirrored.
  • Nothing walks between them. Each town sits on its own island and the ships are the connection — which is the point of the map and is what the guard asserts. Every other map type still guarantees a land route, because that guarantee is what makes them playable.
  • Merged with the naval branch — Ports, fishing boats, transports and galleys, fish and pearl beds, an opponent that sails. Merged against the common ancestor rather than by hand: four conflicts, all in places where the two branches had written in the same spot — the title, the journal, the sprite catalogue and the save payload.
  • A crash came with it, and is fixed. The naval branch gave cmdAttack two early returns — a sheltered unit, and a ship handing off to the naval module — without telling its callers. A garrisoned villager taking a hit then wrote to a null order and took the whole game down. Reproduced on the unmerged branch first, so the diagnosis is not a guess.
  • Both halves survive — six map types, fords, rock, several victory conditions at once, the measured upgrade tooltips and the one-ruler sprite sizes are all still there, and the sprite catalogue carries both the six new sea sprites and the measured sizes.

Previous build · v2.16 — Six Countries

  • Six map types — Continental, Archipelago, Rivers, Great Lakes, Highland and the Arid Frontier, each described under the picker so the choice means something before your first game on it. They are one generator with different thresholds and a carving pass, so everything the map generator always guaranteed survives: the terrain is point-symmetric, neither side gets the better ground, and the starts are chosen on one walkable country.
  • One rule governs every type, and it is not a stylistic one. There are no boats in this game, so a map whose two starts are separated by water is not a hard map, it is an unplayable one. Every type ends with a pass that finds the islands worth keeping and joins them to the mainland with causeways. An archipelago here is a chain, not an ocean — and every type is checked at every size by an assertion that the two starts are joined by land.
  • Rivers have fords — shallow water you can walk across, and the only way over. The starts sit on opposite banks: fill the fords in and the map splits in two, which is what the guard checks. Hold a ford and you hold the war.
  • Highland has rock — ground that cannot be walked or built on, laid in ridges with passes cut through them before the rock goes down, so a pass is never a one-tile slot.
  • The Arid Frontier is the hard one — little water, half the forest and thin forage, so wood runs out early and farms and the market decide the match rather than the nearest treeline. The guaranteed opening packs around both starts are deliberately not thinned: an unplayable opening is not difficulty.
  • A seed is a thing you roll — a button beside the field rolls a new one, no typing.
  • Two new kinds of ground — shallow water and rock — with every passability test in the engine routed through one pair of helpers, so adding a third kind later cannot leave a test behind.

Previous build · v2.15 — Across the Sea (naval branch)

  • Ports and three ships — a 150-wood Port straddles two land and two water cells and rotates its jetty toward the sea. Dark Age fishing boats (75 wood) and transports (125 wood); Feudal Age arrow galleys (125 wood, 60 gold). Normal population, costs, training and repairs apply.
  • Eight passengers — select troops and right-click a transport, or use Embark (Y). The ship meets them at a reachable beach. Select the ship and right-click explored land, or use Unload (U). Infantry, cavalry, villagers, kings and siege keep their original entity IDs and HP. A transport sunk at sea loses its passengers; those within reach of a safe beach can escape, wounded.
  • Sea economy — fish supply food; pearl beds supply gold. Fishing boats carry 24 resources and return to a completed allied port. Nodes are finite and passable. Deterministic marine placement leaves land generation, opening resources and gameplay RNG untouched. No whales or extra resource currency.
  • The opponent sails — the AI can pay for coastal ports, train fishing boats and galleys, reserve troops for embarkation, land an invasion, then return for reinforcements. Land squads cannot take over units reserved for a crossing.
  • Integrated engine — both movement domains use the existing bounded A* queue, combat, fog, minimap, selection, team colours and workshop. Six transparent embedded sprites bring the pack to 41. Local ship motion is render-only; all v2.14 graphics and Classic/Textured settings remain available.
  • Saves — schema 8 stores the marine generation marker and ordinary ship/cargo entity data. v2.13/v2.14 saves load into v2.15 and receive sea resources once; depleted nodes never respawn on later loads. Older HTML versions cannot read campaigns containing new unit types.
  • Validation — nine generated maps across three sizes retain the previous land layout, starting entities and RNG state. Three five-minute AI simulations, an eight-unit voyage saved and loaded at sea, food/gold deposits, naval damage, sinking, Regicide, population, port repairs, all coast orientations, team colours, skin import and fog checks passed. A real AI ferry landed sixteen soldiers in two crossings and returned for reinforcements. Native Canvas/V8 validation and visual inspection were used; an interactive browser run was unavailable in this environment. Performance was sampled with 320 land units and a mixed scene of 360 units.
  • Previous build · v2.15 — Say What You Mean

    • Every card explains itself on hover — and could not before. The command panel had been given overflow:hidden, and because the tooltip is an absolutely-positioned child anchored above the panel, that one word deleted every explanation in the game: the tip was laid out correctly at y=615, above a HUD starting at y=711, and then clipped away. The clipping moved to the button grid, which is what needed it.
    • An upgrade tells you the numbers you are buying — measured rather than described. The player is cloned with the technology added and every derived figure is asked twice, so Wheelbarrow reads Villager speed 1.81 → 2.08 t/s · load 10 → 13 and Fletching reads Archer range 5 → 5.5 tiles. It runs through the same unitAtk, unitMaxHp, gatherRate and buildingMaxHp the simulation reads, so it cannot drift out of date.
    • The reason a card is greyed out is on the card, not behind a click — the missing resource, the age it needs, the building it needs, the population cap.
    • A building says what it is for — what it trains, what it researches, what it accepts — and the age card lists the units, buildings and technologies the next age unlocks.
    • Pick one victory condition or several. The match ends the moment any of them is met, and you stay alive only while every condition you agreed to still holds: choose Regicide and Sack the Capital together and losing either your King or your last Town Center loses the game.
    • The sprites are back on one ruler — the artwork was replaced but kept the sizes measured for the old drawings, so infantry read a head smaller than archers and a scout was a different species from a knight. Every unit is re-measured on its solid mass, which is the figure with the thin parts a weapon adds removed, and the mounts on the length of the horse.

    Previous build · v2.14 — A Living World

    • Contextual overhead animation — breathing, ordinary/heavy walking, laden steps, cavalry gallop, woodcutting, mining, gathering, farming, building and repair. Compact keyframe profiles draw in each unit's local frame; every PNG and classic silhouette uses the same pose.
    • Weapon-specific combat — sword sweeps, spear thrusts, mounted strikes, bow draw/release, mechanical crossbow recoil, gun recoil and a ram's deliberate blow. Cooldown supplies anticipation; the first shot stays immediate. The catapult retains its segmented, foreshortened throwing arm and winch return.
    • A primitive handgonne — Skirmisher keeps its internal ID, costs, stats and anti-archer bonus. Its new transparent north-facing sprite has a wooden stock, bronze muzzle and the same body scale as the other ranged troops. Brief flash and restrained smoke accompany each shot.
    • Arrows, bolts, shot and stone — distinctive procedural silhouettes, visual arcs, shadows and short material-sensitive impacts. Stones tumble into dust and fragments. Flight duration, impact damage and splash rules stay unchanged.
    • Textured / Classic terrain — continuous coordinate-based colour variation, sparse grass tufts, soft dirt edges, muted water and shallow shore bands. Cached chunks do not consume gameplay RNG. Settings remembers the terrain choice; Classic retains the B2.13 palette and tile rendering. Minimap and fog rules remain tactical.
    • Performance and compatibility — reusable poses, renderer-only WeakMap state, capped terrain cache and fewer cosmetic details at high population/distant zoom. No external dependencies or save-schema migration. Existing skin dimensions/orientations are preserved except the replacement Skirmisher.
    • Validation scope — nine seed/map-size combinations; three 15-minute simulations compared against B2.13 with identical campaign state; B2.13-generated save loading and continuation; all 13 unit families, eight headings, custom skins, exact projectile timing, splash and fog masks. Native V8/Canvas and simulated DOM handlers were exercised. At 410 units / 1280×900, the software Canvas fallback measured about 22 ms per warm frame for Textured, versus 5 ms for Classic/B2.13. Browsers with OffscreenCanvas use a disposable bitmap cache; actual browser/GPU performance remains unverified. An interactive Chrome session could not be completed because this environment blocks local-file browser access. Water remains static; no death animation was added.

    Previous build · v2.11

    • Top-down skins — 35 transparent sprites cover every unit, building and resource. Original movement, combat, AI, map and save rules remain intact.
    • Sprite workshop — replace PNG/WebP images, adjust visual dimensions and anchors, import/export a portable JSON skin, or switch back to the classic renderer.
    • Connected fortifications — walls tile through corners and junctions; gate leaves open with the original game state. Team colours, damage flashes and crop depletion remain visible.

    Previous build · v2.13

    • Every unit is measured against one ruler — the manifest scaled every drawing by the same 1/4, which faithfully preserved an inconsistency in the art itself: a skirmisher's torso is 72 source pixels across and an archer's is 44, so the archer read as a smaller man. Each sprite is now scaled so its body lands on one measure, and a pike, a bow or a banner overhangs the footprint instead of shrinking the man carrying it.
    • The horses are horses — a mount now reads at about 2.9 times a man's shoulders instead of 1.8, and the siege engines at roughly three. The multiples are the ones that look right rather than the ones a tape measure gives: a horse really is 4.4 times a man's shoulder width seen from above, and at that size it swamps the map.
    • Villagers face the way they are going — their drawing is built front-down while the soldiers' raised weapons read front-up, so the same reference orientation made villagers walk backwards and turn their backs on the tree they were felling. Their reference is flipped; you can change it yourself in the sprite atelier under Orientation de l'image.
    • Missiles have a shape — an arrow with fletching, a shorter heavier bolt, a bare javelin and a tumbling stone, each casting a small shadow on the ground it is really over, tight underneath and faint at the top of the arc. All drawn procedurally, so there is nothing new to load.

    Previous build · v2.12

    • The permanent outlines are gone — no more team circle under every unit and team square around every building. They date from when a unit was a coloured shape and the ring was the only thing saying whose it was; the sprites carry the team colour themselves.
    • One selection mark — a single translucent ring on the ground, slightly flattened to sit in the same vertical perspective as the sprites, drawn under the unit so the silhouette is never behind it. Buildings get the same language as a soft frame just outside their walls. No more ring plus ellipse plus rectangle at once.
    • Visual aids, off by default — the old outlines are a setting now, in Interface & Save Room and in the sprite atelier, for dense battles, for extra contrast, or for debugging.
    • The catapult throws like a catapult — its arm used to point at the enemy while travelling and stay there while shooting, which reads as a loaded ballista. Seen from directly above an arm does not swing across the ground, it foreshortens: it now lies back with the stone behind the frame, shortens to a stub at the top of the swing, reaches forward as the stone leaves, and winches home during the reload. Driven entirely by the pulse and cooldown the combat code already keeps.
    • Nothing alive is perfectly still — a unit standing with no order sways about a degree and a half at a phase of its own, so a garrison reads as men waiting rather than as furniture.
    • An impact has a shape — a unit taking a hit already flashed pale; it now also compresses about a tenth along the axis it was struck on, for the quarter second the flash lasts.
    • One pose for both renderers — the sprite path and the classic-shapes path had grown identical copies of the same motion code; they share it now.

    Previous build · v2.10.2

    • Chronicle UI hotfix — victory now actually initializes the Overview / Timeline / Statistics panels; tab and metric navigation use a persistent delegated click handler, so the post-game report also works reliably after migrated saves.
    • Field Hospital — a Feudal support building with eight beds. Wounded villagers, infantry, archers, cavalry and Kings can be sent inside; treatment heals 24 HP/s, keeps them at least six seconds, and discharges them automatically when fit. Villagers resume the job they left.
    • The opponent uses medicine too — a developed AI builds one hospital and withdraws severely wounded troops instead of wasting them.
    • Rise Again — destroying the opponent's Town Center no longer disables its AI. Surviving villagers enter an emergency recovery plan: rebuild logistics, gather wood/stone, use a surviving Market when useful, reconstruct the Town Center, then resume the normal personality.
    • Campaign Chronicle — the victory screen now has Overview, Timeline and Statistics views with Military / Economy / Technology / Society scoring, population and resource curves, plus a portable PNG recap.
    • Real-save hitch fix — worker assignment now uses cached reservation indexes, reachability filtering and bounded candidate trials; the AI no longer searches hundreds of impossible trees in one think tick.
    • Off-screen culling — units and buildings outside the camera no longer pay Canvas drawing costs; the simulation remains complete.
    • AI tick caching — ownership and enemy-class censuses are reused within a think cycle and base-threat scans use the spatial hash instead of nested world loops.
    • High-population performance pass — spatial hashing replaces world-wide radius scans for combat acquisition, towers, guards and gates; large formation slot assignment is O(n log n), not O(n²).
    • The renderer stops asking CSS for the font once per unit per frame — the temporary glyph font is cached and high-population scenes automatically drop nonessential shadows/glyph detail at distant zoom.
    • HUD and minimap are decoupled from render FPS — tactical HUD refreshes at 5 Hz and the minimap at 4 Hz, while the world continues to render every frame.
    • Economic breakdown moved to the lower HUD — Food / Wood / Gold / Stone counts stay visible in Regicide and no longer compete with the endgame Holdouts block.
    • Global production ribbon — active queues from all owned buildings are visible at the bottom; click an item to jump to its building. Economy and production ribbons can each be hidden in Settings.
    • Three opponent personalities — Warlord attacks early and never stops, Castellan walls its town and comes late with a heavy fist, Steward booms first and drowns you in the surplus. Difficulty still sets the speed; the personality sets the game.
    • Scouting tells you something — pick “Surprise me” and the first enemy building you actually see names the opponent you are facing
    • The opponent fortifies — a perimeter of palisade or stone wall around its town, with a gate on each side. A measured guarantee comes with it: the ring can never seal its own people in.
    • It can leave the Feudal Age at last — across five mirror games it never once reached the Castle Age. It stopped making villagers at sixteen, spent every scrap of food on soldiers, and sold its own age fund at the market. It now reaches the Castle Age around minute twelve.
    • Reinforcement — it used to hold a forty-four-unit army at home because one squad was technically still alive. New units join the fight in progress.
    • It knows what the match is about — a running Wonder clock outranks whatever building is nearest, its own Wonder brings the army home to defend it, and in Regicide it hunts the King
    • Fields in a wheel around the mill or Town Center — measured at a mean gap of 2.0–2.6 tiles against 2.4 before, with five of six fields in the inner ring instead of four of seven. A first attempt that also filled an outer ring measured worse than the generic search and was dropped.
    • The performance guard measures against a reference build — the same machine re-measured the unchanged previous release a third slower an hour later, so absolute thresholds became a catastrophe ceiling and the real check is a ratio
    • Every unit and building shows its numbers — hit points, attack, reload, armour, range, speed and vision, on the card where you train or place it
    • The counters are named — “+20 vs cavalry” on the Pikeman, “+5 vs archers” on the Skirmisher. The roster became a triangle in v2.4 and there was no way to learn it except by losing to it.
    • The figures are the effective ones — attack carries the age and Forging, range carries Fletching, hit points carry Loom and Bloodlines. A card that disagreed with the damage you take would be worse than no card.
    • Speed and range in tiles, not in pixels: a Knight walks 2.4 tiles a second and an Archer shoots five tiles.
    • The selection panel reports the same stats minus the counters — a readout of what is on the field, not a manual
    • A worker with nowhere to work now reads as idle — standing orders keep its trade so it resumes on its own, but after four seconds of finding no free slot it is counted in Idle instead of quietly sitting under Task: food
    • The two counters agree — a blocked villager leaves the Workers breakdown as it enters the Idle count, so Idle + Workers still adds up to your population
    • The idle tools find them — the Idle HUD block and the . hotkey select blocked workers, so one key takes you to the problem
    • The panel says why — a blocked villager reads no free food rather than Task: food
    • Units stop getting stuck — a census over 82 000 unit-seconds counts 43 stalls where the same games used to produce 113, and the worst kind (a villager holding a full load, working nothing) is down 77%
    • The cause: false arrivals — A* reports arrival as soon as a unit's tile is in the goal zone, while gathering and depositing are judged in pixels. A worker pushed to the far corner of its approach tile believed it had arrived while standing up to 90 px short, forever.
    • Progress watchdog — whatever the cause, a unit making no headway is escalated: replan at 4 s, re-target at 8 s, displace at 13 s, released at 20 s so it shows in the Idle counter instead of pretending to work
    • Impossible orders are dropped rather than shuffled at — the walkable labelling answers "can this ever be reached" in a lookup
    • Progress means getting closer, not twitching: shuffling on the spot no longer resets the watchdog and hides a stall
    • The simulation is deterministic — same seed, same game, every time
    • Market — buy and sell food, wood and stone for gold. Every trade moves the price against you, and prices creep back toward par on their own. Coinage and Banking narrow the spread.
    • The roster is a triangle, not a ladder — Skirmisher answers massed archers, Mangonel scatters a crowd, and Man-at-Arms and Pikeman upgrade the infantry line in place
    • Upgrades replace a type outright — every unit on the field changes, wounds carry over as a share, and the barracks trains the new type from then on
    • Wonder victory — raise one in the Imperial Age and hold it five minutes. Both sides watch the same clock.
    • Regicide — one King each; nothing else decides the match
    • The opponent researches at last — it used to hoard for the next age and never buy a single technology. It now reaches the Castle Age and answers your archers with skirmishers.
    • The formation holds on the march — a line stays a rank across the direction of travel the whole way, not just on arrival
    • Cohesion pacing — a unit ahead of the band slows to at most 45%, so nobody outruns the formation
    • Drift correction — a bounded nudge toward the rank position, validated against the same clearance test as ordinary movement, so it can never cross a wall
    • The performance guard was hardened — the worst-frame metric was too noisy to gate on, so it now measures the order's cumulative extra cost across repeated trials, and it is verified against a deliberately broken build
    • Group orders no longer freeze the screen — the worst frame on a 60-unit order fell from 313 ms to 29 ms
    • Bounded path-request queue — a frame has a node budget; the overflow is served over the next frames while every unit keeps its order
    • Clearance fast path — the inner loop of A* is now one grid lookup, proven equivalent to the old circle test across every tile and unit radius
    • Walkable component labelling — an impossible route is refused in a lookup instead of a full-budget search
    • The opponent notices when it is fenced in by its own forest, finds the thinnest part of the shell and puts a crew on it
    • Performance guard in the test harness with thresholds, so a 300 ms frame cannot reach a release again
    • Formations — box, line, screen, spread or free, oriented along the direction of march, slots claimed by nearest unit
    • Group pace — a formation walks at its slowest member's speed, so it arrives together instead of in a stream
    • Villager dispatch — one click or key sends a selection to the nearest food / wood / gold / stone with room
    • Trade selection — click the Workers HUD block to cycle through everyone on each resource
    • Concentrated sieges — the opponent picks one breach point by cost and brings the whole squad against it
    • Standing villager orders — a worker never gives up on its intent; the search widens 30 → 60 tiles → the whole explored map, so the fifth villager on a full tree finds its own
    • Fields reworked — walkable crops, one farmer each, worked from inside, laid out around a Mill or Town Center
    • Remembered enemy holdings — what you have seen stays drawn as a ghost in explored fog, on the map and the minimap
    • Three victory conditions — Conquest, Sack the Capital, Annihilation, chosen at the start
    • Endgame tracker — the enemy's last three objectives are counted and marked so a decided match is never a search
    • Walls laid by dragging — palisade and stone wall, L-shaped preview, live cost and a skip count
    • Gates that open for your own people, stay shut to the enemy and can be barred by hand
    • Garrison in Town Centers, watch towers and castles: occupants heal and each adds an arrow
    • Castle — a 4×4 keep that fires on its own, shelters fifteen and doubles as a forward drop-off
    • Town bell (Q) shelters every villager and sends them back to the exact job they left
    • Arrow Slits and Fortification technologies
    • Connected rampart drawing, gate state lamp and garrison pips
    • The opponent now builds a keep and pulls its villagers indoors under a raid
    • Adaptive radius-aware A* navigation
    • Soft allied collision and recovery watchdog
    • Combat stances, Hold Position, Patrol and Guard / Follow
    • Villager repair / retaliation / autonomous work recovery
    • Flexible 4-worker resource capacity with adaptive approach points
    • Shift-queued move / gather / attack / build / repair orders
    • Automatic farm reseed with per-farm toggle
    • Tactical unit silhouettes and resource inspection
    • Tavern Tales visual identity pass
    • Natural Continental generation: randomized distant starts on the same landmass
    • Minimap attack pings + clickable idle-worker counter
    • Scalable UI/minimap settings stored locally
    • Save schema v2 with migration of older local saves
    • Construction sites are fully traversable until completion; finishing a building safely evacuates units from its footprint
    • Static-overlap escape resolver prevents units pushed into trees/resources from becoming permanently trapped
    • Selected villager storage gauge moved to a vertical bar on the left
    • Starting Town Centers now reserve a broad resource-free manoeuvring plaza around their footprint
    • Contextual unit motion: villagers visibly work; melee/cavalry rotate on strikes; archers and rams recoil
    • Soft attack notification chime with global and geographic anti-spam cooldowns
    • Traffic ghosting + smooth safe reposition prevents allied crowd jams from trapping ordered units

    Known and unfixed — every one has a guard that fails

    • A gate no longer opens for an ally standing beside it. The friend-or-foe test that made gates work in v1.9 stopped firing somewhere between then and now. Own troops walk the long way round their own wall.
    • An open gate does not clear the block grid. The gate opens visually and the tile stays impassable to the pathfinder, which is the other half of the same story and should be fixed with it.
    • “But it is full.” The worker slot reservation refuses a resource that measurably has room — four slots, none taken, and the villager is turned away.
    • The Workers breakdown miscounts. Four villagers gathering are not four in the lower HUD, so the one number a player uses to check their economy cannot be trusted.
    • The opponent does not defend its own Wonder. v2.8 taught it to bring the army home when its Wonder clock is running; that behaviour is gone.
    • Reinforcement no longer joins a fight in progress. A reserve that has grown past the wave threshold waits at home while the squad it should be joining is losing.
    • Only one of the two sides reliably builds a Port, so an archipelago against the second personality can be a war nobody can reach.

    Next — the carried defects

    • The two gate failures first: they are one root cause and they cost the player the feature the walls exist for.
    • Then the two counting failures — the worker slot and the Workers breakdown — because a number on screen that disagrees with the world is worse than no number.
    • Then the two opponent regressions, with the guards that already name them.

    Then — v2.21: two things the game does not have yet

    • Trade carts between two markets. The Market has one act: buying and selling against a moving price. A cart running between your market and a second one gives it the other half and gives a long game a reason to build wide.
    • A real audio layer. There is one attack chime. Ambience per age, work and combat sounds, a music bed, and a volume that belongs in the settings room rather than in the browser.

    Not built at all — the honest list

    • More than two players. Everything in the engine says owner 0 and owner 1. Teams, 2v2, a free-for-all and an allied opponent are the largest single change left, and the one that would change the game most.
    • Civilisations. One roster, one technology tree, three personalities. Rosters that differ — a cheaper cavalry here, a unique unit there — are what make a second game feel different from the first.
    • Replays. Now possible again: with the seed replaying identically, a match is a seed plus a list of orders, and that is small enough to save and to share.
    • A guided first game. Nothing teaches the game except the keys panel and the cards. A short scripted opening would.
    • Naval depth. Ports, fishing boats, transports and one galley. No fire ships, no blockade, no counter triangle at sea, no coastal towers.
    • Real elevation. Highland has rock you cannot cross; it has no high ground that sees or shoots further.
    • Hotkey remapping, and a key panel that shows the keys you actually have.
    • Scenario objectives — a campaign, or a match with conditions written for it rather than chosen from five.

    Further out

    • v3 — more than two players, teams and allied opponents
    • v3.5 — animated sprites, terrain variety, combat effects
    • v4 — modules, a fixed-rate step, simulation split from rendering, replays
    • v5 — online 1v1, then coop and 2v2

    Roadmap progress

    Patch 1
    100%
    V2.5 Polish
    100%
    V3 Strategy
    95%
    Carried defects
    2 of 9
    V3.5 Graphics
    58%
    V4 Core & Perf
    72%
    Teams & more than two players
    0%
    Touch & small screens
    100%
    V5 Online
    0%

    Build history

    • v2.21 — Steady Hands: the beta-feedback build (First Muster) and the touch build (In Your Hands) merged into one, plus fixes found while merging.
    • v2.20a — First Muster: beta feedback (camera, HUD, reach previews, farm overlap, tree sizes, route audit, map reveal, port food, defence balance).
    • v2.20b — In Your Hands: touch controls with three named modes, a hold that stands in for the second button, two-finger pan and pinch, a latching Shift, cards that explain themselves when held, and an interface that folds down to a phone.
    • v2.19.1 — Wind-driven sail billow reduced by 65%.
    • v2.19 — A Gentle Wind: movement-driven sails, circulating fish, softly submerged pearl beds and cached water ripples.
    • v2.18 — Nothing Hides: garrison tags that eject on the first click, every setup choice explained on hover, the same seed replaying identically after a session's first match, and an opponent that no longer seals its own plaza with houses.
    • v2.17 — Islands and Sails: a real archipelago, the naval branch merged, and the crash it carried reproduced and fixed.
    • v2.16 — Six Countries: six map types, fords, rock, biomes and a seed you roll.
    • v2.15 — Across the Sea: ports, fishing, transport, galley warfare and AI ferry logistics.
    • v2.14 — A Living World: contextual overhead poses, handgonne skirmisher, differentiated projectiles and impacts, cached organic terrain with a persistent Classic switch.
    • v1.0 — Claude baseline + Patch 1 worker/AI/HUD improvements.
    • v1.1 — adaptive navigation rewrite, radius-aware path validation, stances and Hold Position.
    • v1.2 — Tavern Tales UI, class silhouettes, clickable resources, smaller worker bars and military Patrol.
    • v1.3 — first Continental corridor rule, resource work slots, worker self-recovery and military Guard.
    • v1.4 — minimap attack alerts, idle-counter selection, UI scaling and complete local save/load foundation.
    • v1.5 — removed the artificial direct corridor; randomized both starts on one connected continent with balanced local opening resources.
    • v1.6 — flexible multi-worker resource access, Shift order queues, auto-reseed farms, clearer production feedback and save-schema migration.
    • v1.7 — passable construction sites, completion evacuation, robust static-overlap escape and vertical selected-worker load gauge.
    • v1.8 — protected Town Center plazas, contextual work/combat motion, throttled attack chime and congestion recovery with temporary allied ghosting plus smooth safe reposition.
    • v1.9 — fortifications: drag-laid wall lines, gates that read friend from foe, garrison shelters with garrison arrows, the castle, the town bell, Arrow Slits and Fortification, and save schema v3.
    • v2.0 — standing villager orders with a widening search, fields reworked into walkable single-farmer crops anchored to a mill, remembered enemy holdings in explored fog, three victory conditions with an endgame objective tracker, and save schema v4.
    • v2.1 — formations with group pacing, one-key villager dispatch and trade selection, and an opponent that concentrates its siege on a single chosen breach.
    • v2.2 — bounded path-request queue, clearance fast path, walkable component labelling with early exit, a performance guard in the harness, and an opponent that recognises a forest pocket and cuts its way out.
    • v2.3 — formations held on the march through cohesion pacing and bounded drift correction, and a performance guard rebuilt around a metric steady enough to gate a build on.
    • v2.4 — the market and its moving prices, four new units and two in-place upgrades, Wonder and Regicide victories, save schema v5 with the victory mode stored by name, and an opponent that researches, counters and trades.
    • v2.5 — the false-arrival defect behind most stuck units, a four-stage progress watchdog, impossible orders dropped on sight, and a deterministic simulation with a stuck-unit regression guard.
    • v2.6 — a villager with nowhere to work is reported as idle instead of hiding behind its trade: the Idle counter, the idle hotkey and the selection panel all tell you a resource has run dry.
    • v2.7 — unit and building statistics surfaced in the interface: effective attack, armour, reload, range, speed and vision on every training card, with the counter bonuses named where the choice is made.
    • v2.8 — a worthy opponent: three personalities that change behaviour rather than numbers, a fortified town, a functioning Castle-Age economy, reinforcement, and victory-mode awareness.
    • v2.9 — high-population performance pass, spatial indexing, scalable formation matching, cached rendering, lower-HUD economy and global production ribbons.
    • v2.9.1 — worker reservation indexing and spatial resource candidate search.
    • v2.9.2 — profiled against a real late-game save; bounded reachable worker candidates remove the AI reassignment hitch that froze the main thread.
    • v2.10 — Rise Again emergency AI recovery plus the Campaign Chronicle post-game analysis screen.
    • v2.10.1 — Field Hospital treatment, automatic discharge, villager work return and basic AI medical use.
    • v2.10.2 — Campaign Chronicle UI hotfix: populated post-game panels and reliable tab/metric navigation.
    • v2.11 — Les terres vues du ciel: 35 top-down sprites embedded in the file, a sprite atelier with per-entity replacement, and portable skin import/export.
    • v2.12 — room to breathe: the permanent team outlines become an option, selection speaks with one translucent ground ring, the catapult throws like a catapult, and units sway at rest and flinch when struck.
    • v2.13 — one ruler: every sprite scaled so its body matches a single measure, horses and siege engines at credible size, villagers facing the way they walk, and missiles drawn per weapon with a ground shadow.

    Test notes

    Saved locally in this browser.

Interface & Save Room

Tavern Tales · local preferences and campaign persistence

Interface scale

125%

Applies to the full desktop HUD. The folded phone layout keeps its own fixed size.

170 px

Soft grass, earth and shores, or the original tile palette.

Camera keys

Arrow keys, screen edges and middle-drag always pan. Pick a layout preset or click a slot and press any key.

Preset: QWERTY

Campaign save

No campaign save detected.

Manual saves and autosaves are stored in this browser. Export a JSON file if you want a portable backup.

Sprites & skins

35 sprites en vue verticale, images remplaçables et export du skin complet.

Save behaviour

Petit Empire now autosaves approximately once per game minute. A manual save always remains separate from the autosave; Continue loads whichever is newer. Transient projectiles/effects are intentionally not persisted.