<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Second Chance — devlog</title>
    <link>https://secondchancegame.com/devlog/</link>
    <atom:link href="https://secondchancegame.com/devlog/feed.xml" rel="self" type="application/rss+xml"/>
    <description>Building a British open-world life sim in Unreal Engine 5, solo. The tools, the traps, and what the fixes turned out to be.</description>
    <language>en-GB</language>
    <item>
      <title>One playtest, thirty defects, and three of my own diagnoses were wrong</title>
      <link>https://secondchancegame.com/devlog/2026-08-22-playtest-with-an-agent-reading-every-frame</link>
      <guid isPermaLink="true">https://secondchancegame.com/devlog/2026-08-22-playtest-with-an-agent-reading-every-frame</guid>
      <pubDate>Sat, 22 Aug 2026 00:00:00 +0000</pubDate>
      <description>A human drove the game while an agent fired 2560x1440 captures and read every frame as it landed. It found about thirty defects in one sitting, closed a bug that had been open for twelve days, and — just as usefully — produced three confident diagnoses that a readback then demolished.</description>
      <category>playtesting</category>
      <category>verification</category>
      <category>unreal-engine</category>
      <category>agents</category>
      <category>debugging</category>
      <category>silent-failure</category>
    </item>
    <item>
      <title>The deploy said OK at every step and the signup form was dead</title>
      <link>https://secondchancegame.com/devlog/2026-08-22-deploy-said-ok-form-was-dead</link>
      <guid isPermaLink="true">https://secondchancegame.com/devlog/2026-08-22-deploy-said-ok-form-was-dead</guid>
      <pubDate>Sat, 22 Aug 2026 00:00:00 +0000</pubDate>
      <description>A tool that returns the wrong shape instead of an error took a live email signup form down, and reported success while doing it. What went wrong, how it was found, and the guard that now catches it.</description>
      <category>cloudflare</category>
      <category>d1</category>
      <category>wrangler</category>
      <category>deployment</category>
      <category>silent-failure</category>
    </item>
    <item>
      <title>Claude Code desktop app closes instantly on launch — and Windows &quot;Repair&quot; doesn&#x27;t fix it</title>
      <link>https://secondchancegame.com/devlog/2026-08-22-claude-app-wont-open</link>
      <guid isPermaLink="true">https://secondchancegame.com/devlog/2026-08-22-claude-app-wont-open</guid>
      <pubDate>Sat, 22 Aug 2026 00:00:00 +0000</pubDate>
      <description>The Windows app exited on its own and then refused to open at all; three plausible fixes (Windows repair, pruning a 6 GB session-history folder, a GPU setting) all did nothing, and the real cause turned out to be the app restoring a saved in-app browser preview pointed at a local dev server.</description>
      <category>claude-code</category>
      <category>windows</category>
      <category>crash-on-launch</category>
      <category>in-app-preview</category>
      <category>localhost</category>
      <category>session-history</category>
      <category>unreal-engine</category>
      <category>solo-dev</category>
      <category>debugging</category>
      <category>unreal-engine-5.8</category>
    </item>
    <item>
      <title>The agent&#x27;s memory got too big to load — and it failed silently</title>
      <link>https://secondchancegame.com/devlog/2026-08-22-agent-memory-too-big</link>
      <guid isPermaLink="true">https://secondchancegame.com/devlog/2026-08-22-agent-memory-too-big</guid>
      <pubDate>Sat, 22 Aug 2026 00:00:00 +0000</pubDate>
      <description>A week of compacting, restructuring and pruning an AI coding agent&#x27;s memory, including the night the whole knowledge store was archived by accident and came back only because one session went looking for one note.</description>
      <category>ai-assisted-development</category>
      <category>agent-memory</category>
      <category>context</category>
      <category>tooling</category>
      <category>workflow</category>
      <category>claude-code</category>
      <category>opus-5</category>
      <category>unreal-engine-5.8</category>
    </item>
    <item>
      <title>The toilet minigame is finished, verified, and nobody has played it</title>
      <link>https://secondchancegame.com/devlog/2026-08-21-the-toilet-minigame</link>
      <guid isPermaLink="true">https://secondchancegame.com/devlog/2026-08-21-the-toilet-minigame</guid>
      <pubDate>Fri, 21 Aug 2026 00:00:00 +0000</pubDate>
      <description>A pub cleaning job built on top of a toilet minigame reached eight-of-eight phases and passed a live in-editor test measuring exactly the predicted numbers — and a pre-test adversarial audit had already found six critical defects that every automated check in the project called clean.</description>
      <category>unreal-engine</category>
      <category>minigame</category>
      <category>jobs</category>
      <category>unreal-engine-5.8</category>
    </item>
    <item>
      <title>The score improved every round and the fault never did — the quality gate excluded the neck and the arms</title>
      <link>https://secondchancegame.com/devlog/2026-08-19-qa-gate-blind-to-the-fault</link>
      <guid isPermaLink="true">https://secondchancegame.com/devlog/2026-08-19-qa-gate-blind-to-the-fault</guid>
      <pubDate>Wed, 19 Aug 2026 00:00:00 +0000</pubDate>
      <description>A police uniform&#x27;s torso was rebuilt for a fortnight while an automated coverage score kept improving and the same holes kept appearing around the neck — because the gate filtered out the two regions being complained about.</description>
      <category>garments</category>
      <category>quality-gates</category>
      <category>measurement</category>
      <category>metahuman</category>
      <category>blender-5.1</category>
      <category>unreal-engine-5.8</category>
    </item>
    <item>
      <title>186 actor edits reported success and wrote zero bytes</title>
      <link>https://secondchancegame.com/devlog/2026-08-19-python-actor-edits-never-saved</link>
      <guid isPermaLink="true">https://secondchancegame.com/devlog/2026-08-19-python-actor-edits-never-saved</guid>
      <pubDate>Wed, 19 Aug 2026 00:00:00 +0000</pubDate>
      <description>A script tagged 186 placed props, read every one back, verified them, called save and wrote nothing at all — two independent faults, three success messages, and one file timestamp that finally told the truth.</description>
      <category>editor-python</category>
      <category>world-partition</category>
      <category>saving</category>
      <category>silent-failure</category>
      <category>verification</category>
    </item>
    <item>
      <title>Far too harsh on the keyboard — the ebike&#x27;s steering had no smoothing</title>
      <link>https://secondchancegame.com/devlog/2026-08-18-the-delivery-ebike</link>
      <guid isPermaLink="true">https://secondchancegame.com/devlog/2026-08-18-the-delivery-ebike</guid>
      <pubDate>Tue, 18 Aug 2026 00:00:00 +0000</pubDate>
      <description>A digital keypress was assigned straight to the steering axis, so the bike went from zero to full lock in one frame; here is the fix, a headlamp that came on three hours after dark for an unrelated reason, and an honest note that nobody has ridden any of it yet.</description>
      <category>unreal-engine</category>
      <category>vehicles</category>
      <category>physics</category>
      <category>unreal-engine-5.8</category>
    </item>
    <item>
      <title>The first job you can clock on to, and the truck that drove through the river</title>
      <link>https://secondchancegame.com/devlog/2026-08-18-refuse-shift-works-end-to-end</link>
      <guid isPermaLink="true">https://secondchancegame.com/devlog/2026-08-18-refuse-shift-works-end-to-end</guid>
      <pubDate>Tue, 18 Aug 2026 00:00:00 +0000</pubDate>
      <description>A fly-tipping clearance shift now runs from a 09:30 wake-up call to wages in hand, built to fit a vacancy the game had already advertised — and the routing bug it exposed turned out to belong to every vehicle in the world, not to the truck.</description>
      <category>jobs</category>
      <category>economy</category>
      <category>npc</category>
      <category>routing</category>
      <category>fiction-first</category>
    </item>
    <item>
      <title>Getting a MetaHuman from four sessions down to one</title>
      <link>https://secondchancegame.com/devlog/2026-08-16-metahuman-pipeline-that-actually-works</link>
      <guid isPermaLink="true">https://secondchancegame.com/devlog/2026-08-16-metahuman-pipeline-that-actually-works</guid>
      <pubDate>Sun, 16 Aug 2026 00:00:00 +0000</pubDate>
      <description>The end-to-end route from a reference photo to a dressed, animated NPC in Unreal 5.8, and the traps that had to be paid for one at a time before it became repeatable.</description>
      <category>unreal-engine</category>
      <category>metahuman</category>
      <category>characters</category>
      <category>pipeline</category>
      <category>unreal-engine-5.8</category>
      <category>blender-5.1</category>
    </item>
    <item>
      <title>Ten cabs, one road graph, and the bugs only a fleet could find</title>
      <link>https://secondchancegame.com/devlog/2026-08-15-taxis-and-a-taxi-app</link>
      <guid isPermaLink="true">https://secondchancegame.com/devlog/2026-08-15-taxis-and-a-taxi-app</guid>
      <pubDate>Sat, 15 Aug 2026 00:00:00 +0000</pubDate>
      <description>Building a working taxi firm — book from the in-game phone, ride in the back, pay on arrival — and the failures that a single test vehicle had hidden for months.</description>
      <category>unreal-engine</category>
      <category>vehicles</category>
      <category>phone</category>
      <category>systems</category>
      <category>unreal-engine-5.8</category>
    </item>
    <item>
      <title>Clothes that slip down and shred — but only on a body they weren&#x27;t built for</title>
      <link>https://secondchancegame.com/devlog/2026-08-15-garments-slip-down-and-shred</link>
      <guid isPermaLink="true">https://secondchancegame.com/devlog/2026-08-15-garments-slip-down-and-shred</guid>
      <pubDate>Sat, 15 Aug 2026 00:00:00 +0000</pubDate>
      <description>A garment that looked perfect in the rest pose slid down and tore apart the instant the character walked, and the cause turned out to be the mode the clothing was being driven in rather than anything wrong with the clothing.</description>
      <category>metahuman</category>
      <category>garments</category>
      <category>animation</category>
      <category>measurement</category>
    </item>
    <item>
      <title>The singer who is on at eight, and the mic she never put down</title>
      <link>https://secondchancegame.com/devlog/2026-08-14-a-singer-who-turns-up-at-eight</link>
      <guid isPermaLink="true">https://secondchancegame.com/devlog/2026-08-14-a-singer-who-turns-up-at-eight</guid>
      <pubDate>Fri, 14 Aug 2026 00:00:00 +0000</pubDate>
      <description>Building a live turn in the pub — an NPC who leaves the bar, sings for an hour of game time and sits back down — and the two silent failures it cost: a walk target that defaulted to the middle of the map, and a graph edit that compiled perfectly into a chain nothing ever executed.</description>
      <category>unreal-engine</category>
      <category>npc</category>
      <category>routines</category>
      <category>audio</category>
      <category>unreal-engine-5.8</category>
    </item>
    <item>
      <title>Twelve bus stops, and seven of them landed on the empty ring road</title>
      <link>https://secondchancegame.com/devlog/2026-08-12-putting-a-bus-on-a-route</link>
      <guid isPermaLink="true">https://secondchancegame.com/devlog/2026-08-12-putting-a-bus-on-a-route</guid>
      <pubDate>Wed, 12 Aug 2026 00:00:00 +0000</pubDate>
      <description>Putting a timetabled bus on a real route through the estate — how the stop siting quietly collapsed, why the driver ended up crumpled on the cab floor, and what is still untested.</description>
      <category>unreal-engine</category>
      <category>vehicles</category>
      <category>navigation</category>
      <category>npc</category>
      <category>unreal-engine-5.8</category>
    </item>
    <item>
      <title>The editor had to be shut down before the optimisation would run at all</title>
      <link>https://secondchancegame.com/devlog/2026-08-08-headless-commandlet-optimisation-run</link>
      <guid isPermaLink="true">https://secondchancegame.com/devlog/2026-08-08-headless-commandlet-optimisation-run</guid>
      <pubDate>Sat, 08 Aug 2026 00:00:00 +0000</pubDate>
      <description>An open-world map with effectively no level-of-detail data anywhere took the graphics card down twice while trying to fix itself, and the answer was to stop the editor drawing and do the work in three separate headless processes.</description>
      <category>performance</category>
      <category>lod</category>
      <category>nanite</category>
      <category>hlod</category>
      <category>commandlet</category>
      <category>crash-recovery</category>
      <category>vram</category>
      <category>unreal-engine-5.8</category>
    </item>
    <item>
      <title>The coin pile never settled, and the frame rate was the reason</title>
      <link>https://secondchancegame.com/devlog/2026-08-07-penny-pusher-real-physics</link>
      <guid isPermaLink="true">https://secondchancegame.com/devlog/2026-08-07-penny-pusher-real-physics</guid>
      <pubDate>Fri, 07 Aug 2026 00:00:00 +0000</pubDate>
      <description>Building a working penny pusher out of several hundred real rigid bodies, and the feedback loop where slow frames stop a pile settling, which keeps the bodies awake, which keeps the frames slow.</description>
      <category>unreal-engine</category>
      <category>physics</category>
      <category>minigame</category>
      <category>unreal-engine-5.8</category>
    </item>
    <item>
      <title>Carve the water before you build anything beside it — a 7.7 km river, solved offline and cut into the terrain</title>
      <link>https://secondchancegame.com/devlog/2026-08-07-oakhaven-river-carved-and-flowing</link>
      <guid isPermaLink="true">https://secondchancegame.com/devlog/2026-08-07-oakhaven-river-carved-and-flowing</guid>
      <pubDate>Fri, 07 Aug 2026 00:00:00 +0000</pubDate>
      <description>The river was solved as data outside the engine, then carved and built as water bodies — and the day&#x27;s real lesson was ordering, because carving the channel re-graded the ground under a bridge that had been built correctly an hour earlier.</description>
      <category>water</category>
      <category>terrain</category>
      <category>bridges</category>
      <category>procedural</category>
    </item>
    <item>
      <title>The dialogue panel validated clean, reported ten widgets created, and rendered a blank white rectangle</title>
      <link>https://secondchancegame.com/devlog/2026-08-06-dialogue-ui-rebuild</link>
      <guid isPermaLink="true">https://secondchancegame.com/devlog/2026-08-06-dialogue-ui-rebuild</guid>
      <pubDate>Thu, 06 Aug 2026 00:00:00 +0000</pubDate>
      <description>How this game&#x27;s conversation UI stopped being one hand-drawn panel copied forward by duplication, and the class of silent failure that arrives the moment an agent can author widget trees for you.</description>
      <category>unreal-engine</category>
      <category>umg</category>
      <category>ui</category>
      <category>dialogue</category>
      <category>unreal-engine-5.8</category>
    </item>
    <item>
      <title>A scratchcard you hold in your hand, and the two ways it went invisible</title>
      <link>https://secondchancegame.com/devlog/2026-08-05-scratchcards-in-3d</link>
      <guid isPermaLink="true">https://secondchancegame.com/devlog/2026-08-05-scratchcards-in-3d</guid>
      <pubDate>Wed, 05 Aug 2026 00:00:00 +0000</pubDate>
      <description>Rebuilding a full-screen scratchcard widget into a card held in the world, how the wax removal actually works, and why the card rendered pure black while the coin on top of it looked perfect.</description>
      <category>unreal-engine</category>
      <category>minigame</category>
      <category>ui</category>
      <category>materials</category>
      <category>unreal-engine-5.8</category>
    </item>
    <item>
      <title>Proving a physics roulette wheel is fair, and the two tests that lied about it</title>
      <link>https://secondchancegame.com/devlog/2026-08-04-roulette-wheel-tested-for-fairness</link>
      <guid isPermaLink="true">https://secondchancegame.com/devlog/2026-08-04-roulette-wheel-tested-for-fairness</guid>
      <pubDate>Tue, 04 Aug 2026 00:00:00 +0000</pubDate>
      <description>The betting shop&#x27;s roulette wheel is a real rigid body in a real bowl, so the winning number is wherever it stops - which means fairness has to be measured rather than asserted, and the measuring is where all the interesting failures were.</description>
      <category>unreal-engine</category>
      <category>physics</category>
      <category>minigame</category>
      <category>testing</category>
      <category>unreal-engine-5.8</category>
    </item>
    <item>
      <title>Eleven in the morning rendered like dusk — the camera was cancelling out the difference between day and night</title>
      <link>https://secondchancegame.com/devlog/2026-08-01-daylight-that-reads-as-daylight</link>
      <guid isPermaLink="true">https://secondchancegame.com/devlog/2026-08-01-daylight-that-reads-as-daylight</guid>
      <pubDate>Sat, 01 Aug 2026 00:00:00 +0000</pubDate>
      <description>The daytime street looked identical to the night street, and it was not a grading problem — the sun was set to ten lux against a real daylight figure near a hundred thousand, and with no outdoor exposure authority the automatic metering re-normalised both to the same mid grey.</description>
      <category>lighting</category>
      <category>exposure</category>
      <category>look-dev</category>
      <category>day-night</category>
      <category>unreal-engine-5.8</category>
    </item>
    <item>
      <title>Everything I could not automate turned out to be a missing server</title>
      <link>https://secondchancegame.com/devlog/2026-07-31-monolith-mcp-changed-everything</link>
      <guid isPermaLink="true">https://secondchancegame.com/devlog/2026-07-31-monolith-mcp-changed-everything</guid>
      <pubDate>Fri, 31 Jul 2026 00:00:00 +0000</pubDate>
      <description>Adding a second agent server to the same live Unreal editor retired four &quot;the human must do this by hand&quot; rules overnight, and the real win was the observation loop rather than raw speed.</description>
      <category>unreal-engine</category>
      <category>mcp</category>
      <category>tooling</category>
      <category>ai-assisted-development</category>
      <category>unreal-engine-5.8</category>
    </item>
    <item>
      <title>Every planned road was refused for a 200% gradient — the probe was measuring a slab of land nobody could delete</title>
      <link>https://secondchancegame.com/devlog/2026-07-30-road-painter-first-working-road</link>
      <guid isPermaLink="true">https://secondchancegame.com/devlog/2026-07-30-road-painter-first-working-road</guid>
      <pubDate>Thu, 30 Jul 2026 00:00:00 +0000</pubDate>
      <description>Sixteen orphaned landscape tiles hovering about 41 m above the real terrain made a first-hit ground probe read sawtooth gradients of 131–213%, so the road tool rejected every route it was given; deleting them and teaching the probe to accept only landscape hits let the first T-junction be surveyed, levelled, carved, capped and marked the same day.</description>
      <category>roads</category>
      <category>terrain</category>
      <category>tooling</category>
      <category>procedural</category>
      <category>unreal</category>
    </item>
    <item>
      <title>A dancer on the beat, because the beat is a number and not a signal</title>
      <link>https://secondchancegame.com/devlog/2026-07-25-a-dancer-in-time-with-the-music</link>
      <guid isPermaLink="true">https://secondchancegame.com/devlog/2026-07-25-a-dancer-in-time-with-the-music</guid>
      <pubDate>Sat, 25 Jul 2026 00:00:00 +0000</pubDate>
      <description>The nightclub got a music-reactive light rig and one dancer who moves in time with the track, and the reason it works is that tempo is measured offline and baked while only loudness is read at runtime.</description>
      <category>unreal-engine</category>
      <category>audio</category>
      <category>animation</category>
      <category>lighting</category>
      <category>unreal-engine-5.8</category>
    </item>
    <item>
      <title>I kept paying for the same silent failure twice, so I wrote the traps down</title>
      <link>https://secondchancegame.com/devlog/2026-07-22-a-skills-file-for-the-project</link>
      <guid isPermaLink="true">https://secondchancegame.com/devlog/2026-07-22-a-skills-file-for-the-project</guid>
      <pubDate>Wed, 22 Jul 2026 00:00:00 +0000</pubDate>
      <description>A project-resident skill file of verified recipes and silent-failure traps, indexed by symptom rather than by subsystem — why writing each trap down as you pay for it compounds, and where the practice still falls short.</description>
      <category>ai-assisted-development</category>
      <category>documentation</category>
      <category>tooling</category>
      <category>workflow</category>
      <category>unreal-engine-5.8</category>
    </item>
  </channel>
</rss>
