asfarlab.fun On the plate

Forgotten Horizon

Journey to complete my first game for release.

Developer's diary · 270 commits, 5 September to 22 September 2026

In the morning I tagged a checkpoint and started on the Act 7 prototypes while the playtest of the earlier acts waits on me. I kept them outside the campaign and built the shed first: a small room with three wheeled racks on parking tracks and a tray on the rear shelf, with Ding walking to a pale grip before she rolls anything. Then I probed the geometry. The card wanted six essential moves, but the probe found a safe route in three, and I left it in, because I think a rule the player cannot see would be cheating.

The tray at the start of the paper trial: eight torn scraps of a packing note, some face down and some turned upside down, with one scrap selected.

In the afternoon I made the paper: six torn pieces of a packing note and two scraps from other forms, shuffled into a tray for the player to sort. But the words can be read on the loose pieces already, so the building may be only ceremony, and I want blind play to tell me. Later on a blind player got stuck, because the rack's click box swallowed clicks through its open frame, which I think is my fault. So I fixed the picking, and on the repaired run they cleared the shed alone and rejected a plausible scrap by its torn edge.

In the evening I took the things the lab had to invent by subclassing the panel and put them into the engine contract, because I think the next table should not have to invent them again. They are a picture per language, a canvas and pitch so torn paper draws edge to edge, a refusal spoken at the table, and dragging a piece to its place. Then the prototype adopted the shared panel and its own adapter went, but the review handed back two findings, so I made Read look into every menu and let the table use its height, so the loose scraps stay readable.

The movement audition: Ding Ding walking in side view in two panels, the saved baseline on the left and the motion candidate on the right, on matched grey backgrounds.

In the morning I planned Act 7, the puzzle investigation and the production gates around it, and answered the engine handoff that came out of the plan. Then I reviewed last night's motion revamp with the same suites, made the journey suite follow the current Look text, and dropped a stale hold from the generated graph index. The gait itself I still have to watch with my own eyes, so that verdict stays open.

Before noon I built the story workspace, a table where pieces are placed, flipped and turned on a grid, and the arrangement is story state that the save keeps. I built it because the puzzle store cannot say that two pieces may not share a place, and it would have needed thirty-six values per piece to try. It comes with its own store, a panel, a fifth save schema and validators, and the registry ships empty, because nothing in it is Act 7 content yet.

In the afternoon the content review found seven things wrong with it. A past visit to the table stood in for permission to rearrange it now, the tray silently hid pieces past its first column, a checkpoint could put two pieces in one slot, and there were four more like that, so I repaired them all with tests. The recheck found five more at the edge where access meets the requirement clauses, so I repaired those too, and then the workspace was accepted for a bounded Act 7 prototype.

The last thing I changed was the planner. It used to stop counting workspace alternatives at its budget and say nothing, and I think a proof that quietly stops counting is worse than no proof, so now identical branches collapse and a real overflow fails with a name.

After midnight I kept going with the speech. I hardened the provenance so that every line binds to its English, its translations, its recording and its conditions. Then I rewrote the opening and all the speech in Acts 1 to 5 from what each character has actually earned by that point, because the old lines kept lending people knowledge they could not have yet. Then I rebuilt the conversations around questions the player has earned, with guarded categories and answers that close when a topic is done, and went to bed very late.

In the morning I reviewed the overhaul. The campaign bot had missed alternatives inside nested menus, so it tried a card branch that was already excluded and failed, and the Hu suite still asserted seven fixed lines that no longer exist, so I fixed both. The rewrite had also left nearly five hundred dead translation keys behind, so I pruned them through the chapter sources that own them. Then I refreshed the Act 6 plan around earned knowledge and player consequences and authorized the build.

Ding Ding on a country bus, looking out of the open window at fields and village houses on the way to the county.

In the afternoon Act 6 landed, The Balance Due. Tang's county workroom, a treadle investigation that can be undone, independent accounts, an explicit sample and reply handover, three illustrated transitions and the Mandarin performances, all packaged for the Windows playtest.

Ding Ding stands at a black treadle sewing machine on a tiled floor, a wooden stool beside her and a workbench behind.

Later on I reviewed it with the campaign bot planning every ordered outcome across the six acts, registered the workroom on the bot, and prepared the human review. Sewing machine is difficult.

Late at night I went back to how people move. I gave Ding a walk and a jog that recover less between steps, made the early town pay attention more often, shortened Shen's pauses, and gave Ning and Xiaodie their own gestures in the court, then I refreshed the ambient gestures for the rest of the villagers. I kept all of it in a separate worktree with a saved comparison against the old motion, because I want to watch it myself before it goes anywhere near the real build, and I fixed the generated JSON so a fresh Windows checkout keeps the same bytes.

In the morning I did the engine work for Act 5. Puzzle state now survives a save, there are first-person inspection views, routines give the villagers something to do, optional activity tables came with it, and sound cues belong to the activity that makes them. I also fixed a dead zone when a villager arrived at a routine spot, and observer geometry that showed up inside the inspection view.

The Zhou frontage in Blender, seen from above at an angle: a tiled workshop floor with tables, chairs, shelves of pots, a wooden gate frame and a tiled awning.

Before noon Act 5 landed, the viewpoint inquiry, village activity and working NPCs, then I reviewed it and found a bug worth writing down. Once puzzle definitions existed, the conversation service stamped a puzzle revision on every dialogue, so a plain Look looked like a pending puzzle preview. Now the stamp belongs only to a dialogue that carries an event, because I think a label should be clear to the user, although the system knows what it is.

In the afternoon I went back to the picture. I refined the roadside channel and kept the plants on dry ground, softened the ambient footsteps and tidied the scene captions. Then the golden stills, because the road water moved between frames and the stills never matched, so now a still freezes the water and pins every caption, and twelve regions got fresh visual approvals. Later on I planned Act 6, the workroom trial and the conflicting promises, and mapped the campaign pacing, because I want to be sure the mystery can always be finished.

In the evening I played the game myself from the start, and I saw things the tests had not told me. Ding faced away from town when she arrived on the field road, because every arrival reset her heading, so now the facing comes from the route she came through. A note's source line came out as something Ding said, so I moved that evidence into a Notes panel and went through the copy for production words. Then I lowered the footsteps again, added Save and fullscreen to the notebook, and hid the floor circles, because I think the cursor, the name and E are enough.

Later on I reviewed that batch and found two things I did not like. Closing the window could trap the player, because the close refused to quit when the save said no, but the save also says no during a transition, so now the close waits for it and a second close leaves without saving. The runner also took a scope variable from the shell, so a leftover variable could quietly shrink a release run, and now it only takes a scope that is declared. Late at night I kept one verified local build and put Act 6 on hold, because I want to play Acts 1 to 5 through myself first.

Then I played, and one line stopped me. Ding told Hu that one bag delivered to a courtyard tells her about the job and not how Xiaodie is now, and I did not believe she would say that, although the caption routing was correct. So before bed I fixed the copy leaks and started an audit of every spoken line, with a ledger per character, judged from what the speaker knows at that moment and not from what I know as the author.

In the morning I did a long run of small engine services, handovers between characters, nested conversation topics, music rules, presence requirements, translation catalogues, a recap when you press Continue, and each one was small, but I need all of them before Act 3 can work. I also fixed a bedroom shared by two rooms that showed two approach circles where one is right.

One of those services taught me something. I gave every region a budget, triangles, texture bytes once the scene has settled, the peak during a transition, and the time from load to the first drawn frame, and a new region without a budget now fails validation. I also wrote a rule down for myself, because I know I will be tempted later: if a scene is heavy I fix the scene, I do not raise the threshold to make the test pass. I also learnt that hidden objects still cost memory, so I count them too.

Arriving at the Zhou household: a smiling man in a work apron holds a wooden stool in a stone courtyard as Ding Ding and a friend walk in.

In the afternoon I built the Act 3 household visit, then I reviewed everything that had landed since the HUD change and found a quiet bug. The checkpoint planner moved a save into a region without playing the arrival beats, so the save was in town but did not know it. I think arriving somewhere has to be an event in the game and not only a position, so I made the planner play those beats too. Then I wrote the plan for Act 4.

In the evening I did a refactor, conversation and staging moved out of the main game script into their own files, and nothing the player can see changed, which is what I wanted from a refactor. On the way a new check caught an environment atlas older than the art it was built from, and I would only have noticed that when a texture looked wrong in a build. Late at night Act 4 landed, the workshop puzzle, the departure arrangement and the delivery inquiry, and I accepted the candidate build.

Then one more thing before bed. The story-graph analysis took almost three minutes, because every action got its own search from the start, but a search for one action already walks through states that prove other actions, so now it keeps those as witnesses instead of searching again. It gives the same result and takes half the time. Then I wrote the plan for Act 5 and stopped.

After midnight I settled the story direction, then in the morning I made the player's actions explicit. To use a belonging you now choose it in the notebook, press Use, then act on something, and nothing is offered by itself any more. The flask fill in Act 1 stopped working first, and that showed me how much I had been doing for the player without asking.

In the afternoon I split Look from Act, because the two had been mixed for a long time and every inspect line carried a hidden discovery. Right click looks now, Ding Ding describes what you point at from where she stands and nothing changes, and left click acts. I think looking should be free, and only acting should commit to anything.

After lessons: Ding Ding and Yang walk up a dirt road toward the village gate at dusk, with fields and hills behind them.

In the evening I moved the portals, gates and regions out of code into a routes file, then I wrote a small tool that proves from that file that every region, milestone and item is reachable and that no room is a dead end. It found nothing wrong, but I want it there before I need it. The saves now keep a backup of the old bytes when they migrate. Late at night I added the Yang search before Act 2 and handed over a Windows build.

I made the first checkpoint of the project late in the afternoon, the opening film, Act 1 and the pipeline in one commit, then I went to sound. I lifted the village and the footsteps, made everything else duck under conversations, and made leaving a scene more forgiving, because the exits felt too strict when I played it. Then I released that for Windows and the web.

In the evening I worked on the picture. I tried to judge the analogue look from screenshots, but I could not, so I built a preview on the Windows machine and switched between the old look and the new look in place. The opening wanted softness but gameplay wanted to be sharp, so I gave them different amounts of blur. Then I tried halation, then grain with colour noise in the shadows, then I locked the look and moved on.

Character sheet for Ding Ding: front, back and side views in a red track jacket, dark trousers, a canvas shoulder bag and white sneakers.

Before bed I gave Act 1 six villagers with their own faces and voices, and I gave Ding Ding a proper jogging animation. Then I wrote a document with the story options and the first deduction milestone, so that tomorrow I can start from a decision instead of thinking about it all again.

00:00 06:00 12:00 18:00 24:00 Fri 11 Sep 21:53 · Adopt shared workspace controls in Act 7 prototype · 14 files 17:58 · Prototype Act 7 rack access and paper comparison with independent review · 181 files Act 7 prototypes 21:32 · Amend E7-1 from the prototype: bilingual piece images, authored art pitch, in-place refusal for an unsupported read, inspect, drag-to-place · 13 files Contract amended 22:08 · Read preflight walks alternatives and nested menus; the table layout uses its height so loose pieces stay readable · 6 files Scraps readable Thu 10 Sep 08:11 · Plan Act 7 puzzle investigation and production gates · 11 files 09:40 · Review the motion revamp and answer the Act 7 handoff: journey suite follows current Look text, generated graph index drops the stale hold, engine reply for E7-1 and E7-2 · 7 files 12:13 · Record content review findings for E7-1 workspace · 1 files 12:44 · Repair the seven E7-1 review findings: explicit arrangement actions, legal clause and checkpoint arrangements, partial-save validation, full tray, focus-free buttons · 15 files 12:53 · Record focused E7-1 repair recheck and remaining proof cases · 2 files 13:10 · Repair the five E7-1 recheck findings: owner presence on arrange steps, self-gated owners refused, joint conjunction targets, spans conjoined by content, bot solves the combined clause · 10 files 12:01 · Add the bounded story workspace (E7-1): store, panel, schema 5, validators, suite · 204 files Story workspace 13:26 · Accept E7-1 for bounded Act 7 prototyping after recheck · 2 files Workspace accepted 13:40 · Report a workspace branch fanout past the planner budget instead of truncating it; collapse identical alternatives · 4 files Overflow named Wed 9 Sep 00:42 · Harden speech provenance and recording receipts with reviewed fixture repairs · 8 files 01:44 · Support guarded conversation categories and completed topic answers · 12 files 01:45 · Rebuild Acts 1-5 conversations around earned questions and human review · 541 files 08:04 · Review the conversation overhaul: bot excludes nested alternatives, Hu and hints suites follow the rebuilt conversations, validator counts legacy lines · 7 files 08:32 · Prune retired translations through owning chapter sources · 13 files 08:37 · Record the catalogue prune as closing the dead-key finding · 1 files 09:01 · Remove unused Act 1 translation handoff map · 5 files 09:43 · docs: refresh Act 6 around earned knowledge and player consequences · 14 files 11:17 · docs: authorize Act 6 construction and connected perspective review · 7 files 13:39 · Add guarded travel cards and reusable chapter authoring proofs · 26 files 13:47 · docs: update packaged player guide through Act 6 · 2 files 13:52 · docs: record verified Act 6 Windows playtest handoff · 2 files 15:04 · Review Act 6: campaign bot plans ordered outcome variants, puzzle configurations and conversation items across six acts; register the workroom on the bot · 4 files 15:10 · docs: prepare Act 6 human review after engine handback · 3 files 15:13 · docs: record engine-reviewed Act 6 playable refresh · 2 files 21:36 · Keep generated JSON bytes stable in Windows checkouts · 2 files 22:55 · Refresh ambient gestures across remaining NPC phases · 149 files 22:58 · Record motion push authorization and latest-play preparation · 1 files 00:44 · Rewrite opening and Acts 1-5 speech from earned character knowledge · 1723 files Speech rewritten 13:40 · Build Act 6: The Balance Due for Windows playtest · 1077 files Act 6 built 21:37 · Add first gait and early-village motion audition · 64 files Motion audition Tue 8 Sep 08:13 · Add reviewed puzzle state, inspection views and NPC routine services · 162 files 09:08 · Add reviewed optional activity controls and phase-aware clip validation · 25 files 10:41 · Add owned activity sound cues and complete water preview endpoints · 6 files 10:44 · Preserve per-surface environment textures and authored tint · 9 files 10:59 · Fix routine arrival dead zone and restore activity marker ownership · 7 files 11:05 · Validate derived-room textures and supply full puzzle context to fixtures · 4 files 11:27 · Keep observer geometry out of first-person inspection views · 3 files 11:50 · Record Act 5 Windows acceptance and scoped package verification · 27 files 12:19 · Engine owner review of the Act 5 delivery; Look carries no puzzle stamp; bot leaves tables · 6 files 13:02 · Keep everyday observations steady and soften ambient footsteps · 10 files 13:02 · Validate current journey schema in the startup contract · 1 files 13:02 · Refine the roadside channel and keep plants on dry ground · 24 files 13:33 · Refine scene captions and keep controls behind K · 9 files 14:14 · Refresh 12-region visual approvals after independent agent review · 26 files 14:56 · E6-1: operation conditions use the shared requirement validator; Act 6 engine reply · 4 files 14:59 · Map campaign pacing and protect finishable mystery progression · 5 files 15:01 · Reconcile Act 6 handoff with completed E6-1 engine fix · 2 files 19:18 · Lower ambient footsteps another six decibels · 3 files 20:17 · Add notebook save and fullscreen controls and organic town life · 80 files 20:54 · Keep one verified local candidate and rollback checkpoint · 6 files 20:55 · Make Act 6 travel itinerary an explicit pre-recording gate · 9 files 20:57 · Add planted first-encounter idles and clarify Yang's school transition · 60 files 21:31 · Review the playtest batch: window close never traps, runner strips inherited fixture scope, byte-exact catalogue snapshot, prompt-proof retention test · 12 files 21:40 · Adopt lean review evidence storage and audit inherited NPC staging · 6 files 21:44 · Refuse fixture scope for a complete tier anywhere in a suite list; correct the batch review record · 4 files 22:37 · Fix authored copy leaks and verify Hu dialogue routing · 20 files 22:56 · Audit every shipped speech line and establish character ledgers · 107 files 23:59 · Keep interface confirmations out of speech and guard deduction feedback · 7 files 23:59 · Preserve authored Give preview when refreshing dialogue language · 1 files 11:27 · Build Act 5 viewpoint inquiry, village activity and working NPCs · 682 files Act 5 built 13:57 · Freeze road water in stills, pin every golden suite, shade-free stills, one K reminder · 14 files Deterministic stills 14:43 · Plan Act 6 workroom trial and conflicting promises inquiry · 9 files Act 6 planned 19:19 · Keep production copy out of dialogue and orient map arrivals · 26 files Playtest fixes 21:42 · Hold Act 6 for Acts 1 to 5 human playtest · 1 files Act 6 on hold 23:58 · Bound impossible story searches before exploring unrelated states · 3 files Search bounded Mon 7 Sep 00:08 · Preserve exact review evidence and record private Act 2 checkpoint · 22 files 07:53 · Plan Act 3 household visit and reusable engine handoffs · 6 files 08:24 · Add explicit handovers and story-driven character encounters · 58 files 08:32 · Drive gameplay music and milestone stingers from authored rules · 13 files 08:33 · Add per-act translation catalogues with checked compatibility snapshot · 18 files 08:36 · Add requirement-driven actor, interaction and prop presence · 17 files 08:40 · Add opt-in bounded local playtest timing and read-only summaries · 15 files 08:43 · Add bounded repeatable conversation topics through nested choices · 14 files 08:43 · Enforce region geometry texture and first-frame budgets · 8 files 08:45 · Keep presence requirements separate from operation item costs · 1 files 08:45 · Release both authored score players during game teardown · 1 files 08:45 · Show acquired-history recap on Continue without replaying story effects · 19 files 08:46 · Capture rendered recap language and initialize 3D budget fixture · 2 files 08:48 · Expose earned case observations and deduction evidence in Notes · 18 files 08:48 · Add optional authored Think hints for the next unfinished story beat · 15 files 08:51 · Keep local playtest timing attributable across region boundaries · 6 files 08:53 · Harden nested topic identities and stale aggregate source checks · 8 files 08:55 · Record independent engine experience findings and bounded corrections · 1 files 08:56 · Attribute conversation preview replies to authored NPC speakers · 8 files 08:57 · Verify engine experience boundaries and document feature review checkpoints · 8 files 08:57 · Reject unknown staged item gates and prove valid presence claims · 3 files 09:04 · Record independent case-file and conversation topic acceptance · 1 files 09:08 · Complete scoped engine fixture proofs and preserve Godot resource identities · 18 files 09:08 · Accept independently reviewed engine experience scopes after focused fixes · 1 files 10:16 · Keep concrete story search independent of redundant corridor history · 3 files 10:40 · Prefer sufficient local evidence in deterministic chapter checkpoints · 3 files 10:40 · Audit nested chapter performances and props inside Windows packages · 3 files 11:06 · Preserve authored voice clips in object dialogue · 2 files 11:10 · Bound belongings service checks to their declared chapter fixtures · 3 files 11:25 · Refresh packaged smoke for Continue recap and explicit pack mounting · 2 files 11:27 · Record scoped visual approval and native smoke correction review · 3 files 11:32 · Record Act 3 Windows candidate and scoped package acceptance · 6 files 12:47 · fix: show one approach circle per shared bedroom area · 9 files 12:47 · docs: require player-led puzzles from Act 3 onward · 19 files 14:33 · Review the shipped engine services; fix checkpoint arrivals and the Act 3 walkthrough · 59 files 14:36 · Explain the walkthrough report's phase_passed list to chapter authors · 1 files 15:54 · Validate recipe supply chains and pinned historical continuations · 15 files 16:21 · Add reversible physical responses before story transactions · 17 files 16:27 · Use supported audio resource declarations in package audit · 5 files 16:40 · Verify Act 3 puzzle candidate with scoped packaged journey evidence · 5 files 16:55 · Record the engine owner's code quality and coherence review of the content team's work · 1 files 17:33 · Ensemble participants for physical responses (Act 4 cabinet motion) · 8 files 20:06 · Reconcile recorded Act 3 authoring and enforce generator ownership · 6 files 20:43 · Permit concise actor-owned phase episodes with strict media validation · 5 files 20:43 · Preserve later chapter hint order when reauthoring Act 3 · 2 files 21:45 · Support ordered portal closure with consistent runtime and story planning · 14 files 21:45 · Synchronize authored ensemble clocks and restore prior animation rates · 3 files 21:45 · Catch stale environment atlases and isolate inventory unit authoring fixtures · 8 files 21:58 · Reconcile player chapter guide and verify music at its runtime ownership boundary · 5 files 22:07 · Record Act 4 candidate acceptance and scoped package evidence · 10 files 22:27 · Engine owner review of the Act 4 delivery; Act 4 diagnostic suites join the Act4 group · 3 files 23:38 · Plan Act 5 player-led investigations and establish screenplay review · 10 files 23:55 · Record planning upload and verified manual archive cleanup · 3 files 09:10 · Record nine-feature engine checkpoint and independent acceptance · 3 files Engine checkpoint 11:17 · Build Act 3 household visit with voiced choices and three authored regions · 602 files Act 3 household visit 16:22 · Make Act 3 progression depend on visible household puzzles · 289 files Household puzzles 17:06 · Plan Act 4 player-led progression and lock musical identity · 11 files Act 4 planned 19:57 · Engine refactor batch: services, harness, strict loader, generator check, registry, selector · 64 files Engine refactor 21:47 · Complete Act 4 workshop puzzle, departure arrangement and delivery inquiry · 931 files Act 4 built 23:21 · Halve the story-graph analysis and checkpoint tests without changing their results · 2 files Analysis halved Sun 6 Sep 00:06 · docs: select Returning Daughters and lock opening continuity · 19 files 09:31 · docs: adopt Option C narrative and record investigation design gates · 29 files 09:31 · docs: preserve supplied Markdown line breaks and provenance · 3 files 10:37 · Add journey schema 3 with milestones, last state and aggregate commits · 32 files 10:38 · docs: record the final Release run and source digest for the save-milestones checkpoint · 1 files 14:48 · Add explicit use and combine for belongings with recipe validation · 34 files 17:24 · Add scoped verification runs, frozen frames, golden comparison and the approval ledger · 28 files 18:16 · Author portals and story gates in routes.json instead of code · 15 files 19:09 · Fix scene collisions and make approach circles reliably interactive · 12 files 19:19 · Plan Act 2 first deduction and document engine handoff · 3 files 19:47 · Author regions, objectives and requirement objects in routes.json · 19 files 19:57 · Add authored choices and the chapter-time interlude · 16 files 20:06 · Make the HUD cinematic: captions on the picture, controls behind K · 11 files 21:27 · Checkpoint Act 2 integration before Yang search revision · 332 files 22:55 · Refine Act 2 portraits and scope verification to changed behavior · 13 files 23:38 · Polish Act 2 journal and verify changed gameplay boundaries · 43 files 23:54 · Record Act 2 Windows handoff and build cleanup · 20 files 15:19 · Split Look and Act: right click looks, left click acts · 29 files Look and Act split 18:04 · Add story-graph analysis, graph-driven walkthrough, checkpoints, Play Latest and proportionate gating · 27 files Story graph proofs 22:18 · Add the Yang search before Act 2 and verify regional approaches · 87 files The Yang search Sat 5 Sep 17:46 · Lift village and footstep mix, duck conversations, and widen exit selection · 10 files 18:03 · Release reviewed audio balance and forgiving exits on Windows and web · 30 files 19:04 · Prepare Windows Forward+ analogue preview for human visual review · 26 files 19:14 · Strengthen analogue softness and outline bleed with previous-look comparison · 12 files 19:21 · Keep cinematic softness in opening and sharpen gameplay blur · 12 files 19:34 · Add warm halation comparison while locking selected analogue look · 12 files 19:43 · Retain accepted halation and preview grain with shadow colour noise · 11 files 21:59 · Align desktop production guidance and hide private review controls · 33 files 22:15 · Record verified Act 1 Windows release and recovery checkpoint · 22 files 23:27 · docs: plan complete story options and a deduction milestone · 10 files 17:14 · Checkpoint opening and Act 1 with complete authored assets and production pipeline · 597 files First checkpoint 20:09 · Lock approved desktop analogue art direction and verify Windows release · 37 files Analogue look locked 21:23 · Expand Act 1 with villagers, belongings and authored jogging · 224 files Villagers and belongings

One row per day, newest at the top, left to right through the day. Larger dots changed more files. The peach dots are the steps I would point at.