This one started with a phone. The Android build went out with 0.7.2 and the first report back was one word, unplayable, so most of the week went into finding out where a frame goes on a handheld, and then on the desk, where a big enough crowd was dragging the game down to 4 fps. Small and middling fights are smooth on a phone now. The crowd that spiralled the desk runs five times faster. The biggest fights on a phone still hitch, and the reason is known and written down below.
Around that: Uncle Jim starts paying attention to what you do, two commanders can share one fight, the Elder Treant turns the whole wood to autumn when he wakes, and another 93 sprites went back to the drawing board.
The phone build was profiled over a cable, in a real fight against the Verdant Queen, on a Pixel 10 Pro XL. Before a single soldier was on the board the game was already submitting about 1,600 draw calls a frame. Every body added 50 to 66 more. At the fight's peak of 53 bodies that was 5,468 draws, and the phone was managing 25 frames a second with the worst ones taking 181 ms.
The sim and the script explained about a quarter of that. The rest was the phone's graphics driver chewing through submissions, roughly five times slower per draw than a desktop. So the first round of fixes was about sending less:
After that the phone was submitting about 39 draws per body, resting at around 55 fps between plays, and got through fights of 129 bodies. Above 100 bodies it still spikes, and the profile says those spikes are now mostly script, the per-body logic of a hundred and more soldiers, which is the next thing to go after.

The phone build is also smaller. Last week's build had already dropped from 1.98 GB to 344 MB and nobody mentioned it. This one is 327.5 MB: the 34 painted card cutouts leave the phone and browser builds, since neither could draw them, and the arena backdrops are capped at 2048 wide, down from 3072.
On a finger, tapping a hand card used to pick it up sticky and fly it to the side with an aiming arrow, when all you wanted was to read it. A tap now raises the card big, in place. A drag from there carries it. While you are aiming a summon or a spell, the carried card parks at whichever edge of the screen the aim is not on, so the face is not sitting over the tiles you are trying to hit.

A screenshot came in from a crowd fight against the Fear Drinker: 333 ms a frame, 8,443 draws, two hundred-odd bodies carpeted in floating "Fear" words. The obvious suspects were the words and the Fear mechanic. A probe stood the same fight up at 216 bodies and switched things off one at a time, and neither of those was it. Rendering was 12 ms of the frame.
The tick did not fit. At 220 bodies a physics tick costs about 7.4 ms, and at 60 ticks a second the sim owed 442 ms of work every second, so the engine's catch-up clamp ran its full eight steps every frame and the game spiralled down to about 7 fps. The same field at 30 ticks a second measured 28.8 ms against 143.5.
So the battle now sheds. There is a ladder with three rungs above normal, climbed off a running average of frame time. It climbs in under half a second and steps down only after three seconds of real headroom, so it cannot flap.
Everything on the ladder is cosmetic apart from the tick rate, and 30 is the rate a phone already runs at all the time. Outcomes, co-op streams and replays are identical at every level. If you chose 30 yourself in Settings, the ladder never overrides you upward.


A card face is about 90 nodes and takes about 11 ms to build, which on its own is most of a frame. The enemy's play strip and the spell telegraph were each building one per play, all in the same frame at the round boundary, which is exactly where the lag reports pointed. Faces are booked into a queue now and built one per frame; a play arrives as its token first and dissolves into the face a frame or three later, while the holder is still sliding in. Above 1x speed the strip does not build faces at all until you point at one, which removes the round-boundary spike outright at the default 2x. The opening deal is built while the board is still assembling, so the first "Your Turn" went from five 25 to 33 ms frames to the banner's own one.
The frame readout in the screenshot above is a new switch, "Show performance stats", under Settings, Game, Advanced. Change something mid-fight and watch the number move. The Display page's frame-rate knobs (vsync, the fps cap, the desk lamp, the half-rate sim, floating numbers) folded away under their own Advanced header, because that page had grown tall enough to push the Close button off a 1080 screen.

A player on an Intel MacBook Pro crashed the instant he beat Rusty, one battle in. The highlight reel was reading the GPU back from inside the renderer's own draw, and on that platform the read stalled every frame in flight and re-entered a callback that was already running. The composite waits a frame now, the capture gate closes while it runs, and the Mac takes the safe readback path. The GIF encoder turned out to be throwing away its colour cache every frame as well; the output is byte-identical, it just stops doing that.
A Mac player wrote in with "Missing game executable". It was not the Mac. Renaming the game renamed every exported binary, and the launch options on the store are configured separately, so from the day 0.7.0 went up on 26 August until the end of 0.7.2 the Windows, Mac and Linux launch options all pointed at files no build contained. Steam refuses those before anything of ours runs, which is why no log or crash report ever saw it. Corrected on the store on 31 August, and the ship script now compares the two before anything is uploaded.
The guided march was a lecture. Every offer had one right answer and the other two were dealt face up and refused on press. Jim keeps a memory of the march now: what you actually took at each offer, how often that was not what he suggested, and which remarks he has already spent. Every suggestion is a suggestion. Go your own way three times and he says he has noticed, once. The campfire's forge steers onto the card you really took at the first fight. Play a spell where he asked for a soldier and he tells you what a spell is and lets the ask stand. The fire is an ordinary fire, with Rest switched on and its real number, and Jim mends you himself on the way in.
The acorn is a thing. Grix carries it through the boss fight, hung on his body so it heaves with him, and when he goes down it flies the length of the arena into your commander's hand. The send-off page is Jim's own event page, in his woods, and he hands it back. His woods got a dusk sky and a near tree.

Between acts he reads the act's own ledger: the longest scrap, the one-round door-slam, the fight that left the mark. And he has 124 new lines, drawn from a written history of every kingdom and grudge in the bestiary, one snippet per lord, told in whatever costume he happens to be wearing.

The Masked Challengers is an event that fuses any two ordinary commanders into one battle. They take the two far corners, the roads are dealt by half, each lays its own signature ground on its own roads only, and the stage is visibly torn and taped together from both their arenas. The pair spends four energy a round between them while both stand. Kill one and the fight goes on: the survivor's own book replaces the fused one, with none of the fallen's cards, spells or pressure, and the energy drops back to three.

The Brass Pilgrim chain got its own currency. The puzzle in beat one hands over the Cold Star Splinter. The message in beat two comes with the Letter to Halav and the Dead King's Due, a borderless curse that costs 1 and rides every shuffle to the top of your deck, which is the counter the Letter needed now that the Letter pays once a round. The great lantern at the end opens only for whoever still carries all three, so scrubbing the curse at a campfire is a choice with a price. The orrery is timed now, and it turns under a finger.
The Toll used to be a purse you looted. It is Brother Clang's toll now: a Toll Collector musters at his back line in every lane and walks the whole board at your crown, and each one that reaches it takes 5 gold. A lane you are holding kills its own collector; the bill is written by how many you let walk.
The Vivisectionist's two questions, which used to be four coloured slips on a tinted heading, are an event page with a story on it. The menu changed under it: Bone Plating gives Armor 2, Adrenal Graft brings Pounce in with the Charge, Grafted Longarms says what it does instead of quoting reach numbers, Lumbering Gait cuts movement to a quarter, and Necrotic Graft takes Sluggish Reflexes' place on the menu and starts the patient rotting.

When his last stand puts him up in his amber-leaved woken form, the arena follows him: a front spreads out of his post across the mat, up the backdrop and through every standing green, and the swamp is an autumn wood from that frame on. His Earthquake is no longer a disc of card dropped on the aim point. A ragged mouth opens at the epicentre and a heave of thrown-up earth runs the length of the lane in both directions, because that is what the spell does. He is felled with an axe, one overhead, and the trunk comes apart in two halves with a pale round of heartwood showing.
Every boss phase break used to be a white-out with a new body behind it. It is three beats now: the old form locks up and swells, comes apart in pieces cut from its own art, and the new one climbs onto the same feet through the debris, printed flat in ink first and resolving to the real art as it plants.

The Cursemonger's silencing miasma pools in every lane rather than one random band, so every lane has a place to hold a kill until the wisp is standing in the hush. The Twins' bestiary page tells you what killing one twin does, which was the entire elite check and was written nowhere. Phoenix Plume asks one thing before it heals: that the enemy commander lost health this round.
Each enemy card carries its lord's origin stone in the bottom diamond, and until this week most of those were a badge: a skull, a snowflake, a ring with a glyph in it. They were drawn twice. First as busts to their faction's style card, then again once the rule became that the stone is a portrait of the rig you actually fight, so Rusty's stone grins like Rusty and the Fire Devil's is the red imp with the flame crest that walks onto the board.

The same review loop that redrew 594 sprites last week kept going. The eleven generic enemy bodies that had been borrowing the player's faces (the Warlord, the Ogre, the Commander, the Shaman and the rest) are their own grey-green host now, drawn to an enemy sheet. The fifteen act-3 lord sprites of the Dread Court, Perihelion, Rex Mortifer and the Avatar of Winter went through two blind judge rounds. The three archers stopped sharing one pose.

Sixteen potion icons were redrawn. Eleven of them had been a picture of a bottle stamped onto the bulb of a drawn bottle, and five borrowed a keyword glyph that belongs to every card with that keyword. Each draws what the drink does now.

Twenty archers were twenty full-volume copies of one bowstring, 45 ms apart. There is a voice cap per family now, and each voice already sounding pulls the next one down, so a volley sums to about one shot loud. And a shot sounds like what it throws: a crossbow clacks, a slinger whips, a spitter spits, a caster hums, a launcher's lob thuds, instead of every one of them twanging a longbow.
Songs are blended on two decks, the way a DJ hands one over. Every crossfade used to be a dip through near-silence, so the track-to-track blend is 4 seconds now and a boss theme cutting in is 3.
A slip of card sits above End Turn whenever a pad is driving, wearing the glyph of whatever button opens Inspect mode. It was the one battle control a pad player could not find by pressing things. Nothing is selected while the armies are still taking the field; the ring used to land on a potion for the whole muster. And a tired stick's drift is measured and subtracted, per device and per stick, so a pad on the desk stops steering the pointer by itself.
If you have sent a report through the quill and a build you are now running did something about it, the title screen opens one sheet of vellum addressed to you by name, quoting your words, listing what changed because of them, and signed. Nobody phones home for this who has not written in or does not already share telemetry, and "Letters from the developer" in Settings switches it off.