Agoro Road in het openbaar bouwen

Een werkend logboek van een spel dat niet af is. Wat we besloten, wat het kostte, en wat er verkeerd uitkwam — inclusief de dingen waarvan we onszelf al hadden wijsgemaakt dat ze goed waren.

Bijgewerkt op 20 september 2026 Nieuwste eerst In ontwikkeling
De maatstaf die deze pagina zichzelf oplegt

Alles hier was waar op de datum die erboven staat. Conceptbeelden worden als conceptbeelden aangeduid en schermafbeeldingen als schermafbeeldingen, want op dit project is juist het verschil daartussen het hele probleem geweest. Waar een besluit een eerder besluit terugdraaide, blijft het eerdere op de pagina staan.

Waar de weg staat

De korte versie, op één plek bijgehouden en bijgewerkt met het logboek. Elke andere pagina en elk bericht dat we schrijven begint bij deze lijst.

Stand 21 september 2026Elke plek, met zijn staat
Speel gratis in de browserLiveDe volledige regio Hearthland, co-op via privécode, zonder account.
Reserveringen · Wave 1-editiesOpenGratis, alleen een e-mailadres, er wordt niets afgeschreven. Digitaal €12.99 · Steuner €19.99 · Collector's €99 / €149 (500 plaatsen) · Founder's €250 (20 plaatsen).
iOS · App StoreIn voorbereidingDe app-identifier is bij Apple geregistreerd. De winkelvermelding en de eerste build worden nu voorbereid; de datum wordt hier aangekondigd zodra de build is ingediend.
Android · Google PlayIn voorbereidingDezelfde build. Er bestaat nog geen Play-vermelding; die volgt op de iOS-vermelding.
De weg in 3D (web en desktop)In voorbereidingHaalt 60 beelden per seconde. Elf van zijn objecten zijn nog plaatsvervangers, dus hij staat nog niet aan voor spelers.
Figuurtjes, hier geprintIn voorbereidingEerste reizigers geprint op 14 september op de eigen printer van de studio. Een figuur van 10 cm kost twee tot drie uur printen.
RevenueCat Shipaton 2026In voorbereidingWe bouwen er in het openbaar voor en dit logboek is het knooppunt voor die berichten. Inzendingen sluiten op 30 september.
Tripothon S1IngeschrevenIngeschreven op 14 september. Inzendingen lopen van 15 september tot 5 oktober; de onze is de weg in 3D.
IndiegogoIn voorbereidingEen campagnepagina wordt voorbereid. Indiegogo start een campagne niet eerder dan zeven dagen na haar beoordeling, dus de datum wordt hier eerst aangekondigd.

Epic zegt dat je een pc nodig hebt. Wij draaiden hun editor op een MacBook — en liepen toen tegen drie muren aan die niets met de Mac te maken hadden.

Unreal Editor for Fortnite werkt alleen op Windows. De documentatie is er onomwonden over: om UEFN te gebruiken heb je een pc nodig. Die hebben we hier niet. Dus ging Windows in een virtuele machine op de laptop, en de editor opende, en Verse compileerde, en onze reizigers, de kar, een boom en een wachtpost stonden in een Fortnite-eiland dat we daarna op een tablet speelden.

Dat deel werkte. De drie dingen die we daarna leerden zijn het nuttige deel, en geen daarvan gaat over hardware.

Je kunt je eigen personage niet zijn. De speler is in Fortnite een Fortnite-avatar. Het systeem voor realistische mensen is in de editor toegestaan, maar de licentie staat het alleen toe voor personages die je tegenkomt, nooit voor degene die je speelt. Een spel waarvan het hele onderwerp de reiziger is die jij bent, kan die reiziger daar niet in de handen van de speler leggen.

Het spel draait niet waar de editor draait. Fortnite vereist een beveiligingsfunctie die de virtuele machine niet kan leveren, dus het bewerken gebeurt op de Mac en het testspelen op een tablet, via een code. Die lus werkt, en hij is trager dan hij klinkt.

En de gefotografeerde wereld kon er niet in. We hadden ons rustkamp opgebouwd uit acht gegenereerde aanzichten — als puntenwolk is het werkelijk goed, de beste blik op deze plek die we hebben. Omgezet naar het soort oppervlak dat een spelengine wil, is het confetti: ruim een miljoen fragmenten die zich niet laten vereenvoudigen. Er meer dan negenennegentig procent van wegsnijden haalde er een derde weg. Het is een beeld waarin je kunt staan, geen geometrie waarop je kunt bouwen.

Wat er veranderde — we vragen nu eerst of een platform ons ding kan huisvesten, voordat we een dag besteden aan het passend maken van ons ding voor het platform. Elk van deze drie muren was gepubliceerd, of meetbaar, voordat we begonnen. De omweg was niet verspild — we kwamen eruit met een werkend Windows-spoor en een herbruikbare route voor onze eigen modellen — maar de vraag die de muren gevonden zou hebben kost een middag lezen, en wij stelden hem in de verkeerde volgorde.

Het 3D-beeld haalt zestig beelden per seconde. Het is nog steeds niets om naar te kijken.

De tweede renderer is af. Hetzelfde spel eronder, twee manieren om het te tekenen: het oorspronkelijke platte beeld en een realtime 3D-beeld, die één simulatie delen die geen van beide mag aanraken. Beide spelen een identieke opname af tot een identiek resultaat — het bewijs dat het 3D-beeld een beeld is en niet een tweede, subtiel ander spel.

Op de testomgeving tekent het een frame in ongeveer 16,7 milliseconden, en het traagste in een lange reeks nam 16,8. Dat is een vastgezette zestig beelden per seconde, met veertig lopende reizigers en ruwweg zevenhonderdduizend driehoeken in beeld. Zeventien van de zeventien controles slagen.

En het is nog steeds niet uit te brengen, want elf van de objecten die erin staan zijn plaatsvervangers — degene die in het bericht hieronder beschreven staan, gegenereerd uit geschreven beschrijvingen in plaats van uit de conceptbeelden. De renderer is af. Wat de renderer tekent niet.

Wat er veranderde — "de renderer is af" en "het spel ziet er goed uit" bleken onafhankelijk van elkaar, en wij hadden het eerste stilzwijgend als bewijs voor het tweede behandeld. Een prestatiegetal kan geen artdirection zien. We rapporteren ze nu als twee losse toestanden, want een groene build die de verkeerde objecten met zestig beelden per seconde tekent, zijn nog steeds de verkeerde objecten.

En — het assetwerk verhuisde van een mens die door een webgereedschap klikt naar iets dat de build zelf kan uitvoeren. Dat verwijdert een hele klasse fouten die we maakten: in dat gereedschap sprongen instellingen tussen stappen stilletjes terug — privacy, detailniveau, welke animaties worden geëxporteerd — en drie afzonderlijke sessies raakten er werk door kwijt. De vervanger is niet slimmer, hij kan alleen geen vinkje vergeten.

De voor de hand liggende instelling deed niets. Dus maten we waar de supports werkelijk raken.

De twee prints van gisteren (hieronder) faalden op één grootheid: materiaal dat achterbleef op het figuur. Onze slicecontroles hadden beide bestanden goedgekeurd, want geen ervan mat dat. Het eerste wat vanochtend gebouwd werd was dus het ontbrekende instrument: een script dat het afgeronde gereedschapspad leest en meldt hoeveel vierkante millimeter supporttoppen het model raken, op hoeveel plekken, en of er een supportstam uit het figuur zelf groeit.

Dan de instelling waar iedereen naar grijpt. "Supports alleen op het bouwplateau" klinkt als de oplossing voor restmateriaal. Op Daniels bestand veranderde het 191 mm² op 1.083 plekken naar 184 mm² op 1.040 — omdat elk van de zeven stammen al op het plateau stond. Het restmateriaal waren nooit de stammen. Het waren de toppen onder de tas, de handen en de kin, en de takken die onderweg omhoog langs de wanden streken.

Wat het wél verplaatste: dunnere bomen met één wand, een ruimere afstand tot de wanden, een hogere ruimte onder het model en een steilere drempel. Daniel 191 → 127 mm² (met de zolen vlak gesneden zodat er niets onder de voeten zit). Amara 178 → 45 mm², zonder stutten, zonder pennen en zonder blok — de twee krullen die nog in de lucht begonnen kregen een verborgen brug van 1 mm de haarmassa in, twee millimeter lang, die er nooit af hoeft. Twaalf kleine kantelingen van elk figuur werden gesliced en gemeten; elk was slechter dan rechtop staan. Ook laaghoogte bleek een hefboom: bij 0,14 mm in plaats van 0,2 mm zakken de toppen op Amara naar 8,5 mm², voor 27 minuten extra printen — gesliced en gemeten, nog niet geprint.

Het geprinte Amara-figuur van 80 mm van achteren gezien: paars PLA, zes korte pennenstompjes in de nek onder het haar, ruw supportrestant tussen de benen onder de zoom van de jurk
Waarvoor het instrument gebouwd werd. Foto van de eerste Amara-print: de pennen in de nek en het blokrestant onder de zoom.
Het geprinte Daniel-figuur van 97 mm liggend op een houten tafel: paars PLA bedekt met fijne draden, met ruwe plekken op de schoudertas en langs de wandelstaf
Dezelfde dag, Daniel op 97 mm. Foto. Fijne draden over de romp, boomlittekens op de tas en langs de staf.

Wat er veranderde — een print wordt beoordeeld op restmateriaal op het figuur, gemeten vanaf het gereedschapspad, niet op het aandeel support in het bestand. En "vind een manier" betekent een andere aanpak op tafel naast de afgestelde: het plan van vandaag is beide figuren op 120 mm op een grondplaat (gesliced: 5 u 07 en 6 u 17), een supportspoor dat zijn eigen dunne pilaren vanaf het plateau laat groeien met speldenpunt-toppen in plaats van de interfacelagen van de slicer, twee onderzoeksrondes naar hoe andere figuurprinters met supports en laaghoogtes omgaan, en de eerste print van de herwerkte Amara.

We printten de eerste twee reizigers op onze eigen printer. De supports wonnen.

Twee figuren kwamen voor het eerst van de bureauprinter: Amara Sol op 80 mm en Daniel op 97 mm, in het ene paarse filament dat we geladen hebben. Elk droeg een ander antwoord op dezelfde vraag — hoe houd je handen, een pot, een zoom en haarkrullen omhoog terwijl ze printen.

Amara kreeg ons eigen antwoord: dunne stutten en pennen versmolten met het model, er daarna afgeknipt, plus een massief blok onder de zoom. Daniel kreeg de boomsupports van de slicer. Beide antwoorden waren fout op deze maat. De pennen achter Amara's haar en onder haar oorbellen zijn op 80 mm niet met een tang te bereiken. Het blok onder de zoom liet puin tussen haar benen achter. Daniel kwam van het plateau bedekt met fijne draden, met littekens waar de bomen de tas en de staf hadden vastgehouden.

Rondom de print gingen dezelfde dag de onderdelen live waarmee mensen kunnen meekijken: een browserweergave die het gereedschapspad afspeelt naarmate de printer voortgang meldt, een bericht om de vijf procent naar de communityserver, en een uitleg "de printer wakker maken" voor de stream. Niets daarvan verandert hoe de prints eruitzien; het verandert wie ze kan zien.

Het geprinte Amara-figuur van 80 mm op zijn zij op een houten tafel, paars PLA, met dunne supportstaafjes nog vast van de jurk naar de handen en de pot
Amara op 80 mm, eerste print. Foto. De staafjes van de jurk naar de handen waren ons eigen ontwerp — en ze laten op deze schaal niet schoon los.

Wat er veranderde — stutten en pennen die in een figuur onder 100 mm versmolten zijn, zijn afgeschaft; wat de print omhooghoudt moet op het plateau staan en het figuur zo min mogelijk raken. En elke controle die zei dat deze bestanden klaar waren, is nu gekoppeld aan één die meet wat de controles hadden gemist.

We legden de schermafbeelding van de renderer naast het conceptbeeld. Dat had nog nooit iemand gedaan.

Het 3D-beeld had alles doorstaan wat we ervan vroegen. Dezelfde invoer speelt over zeshonderd frames af naar hetzelfde frame, de frametijden zijn prima op een telefoon, de veertien afgeronde meshes staan op de juiste ringen. Dat is allemaal waar en het is allemaal geverifieerd.

Wat niemand had gedaan, was een opname ernaast leggen van het beeld waar het op hoort te lijken. Toen we dat eindelijk deden, was de afstand niet klein. De grond is één plat groen vlak zonder horizon. De weg is een beige lint. De uitgehouwen stenen ringen — het heldenelement van elk beeld in dit spel — zijn doorschijnende bleke schijven op dertig procent dekking.

Niets daarvan is een bug. Elk daarvan is iets dat nooit gebouwd is en dat slaagde voor een test die niet keek.

Het 3D-beeld van Agoro Road op 13 september 2026: een plat groen grondvlak, een beige weglint, doorschijnende bleke schijven voor de ringen, en de afgeronde meshes langs de weg
De build, 13 september. Een opname uit de echte renderer, bij de vaste camera van het spel.
Het conceptbeeld: Lantern Bend in de schemering, een kronkelende aarden weg door een hooggelegen vallei met uitgehouwen ringen, een wachtpost, een lantaarnpaal en een tuinbed
Het conceptbeeld waaraan het wordt afgemeten. Lantern Bend in de schemering.

Wat er veranderde — het uiterlijk maakt nu deel uit van de acceptatie. Een opname komt naast het conceptbeeld te liggen en wordt beoordeeld zoals een kunstasset beoordeeld wordt. Een testsuite die het uiterlijk niet meeneemt, keurt vrolijk een build goed die er niet goed uitziet.

Elf props kwamen verkeerd uit. We doen alle elf opnieuw, niet de zes die faalden.

De gebouwen en props werden gegenereerd uit geschreven beschrijvingen. De conceptbeelden bestonden voor de meeste al, in dezelfde map, en werden niet gebruikt.

De trom kwam terug als een zwarte gietijzeren ketel. De lantaarn kwam terug als een Victoriaanse straatlantaarn. De goederenkar kwam terug als een houten kruiwagen. Eén voor één beoordeeld tegen de kaarten die ze moesten evenaren: vier waren het verkeerde object of het verkeerde palet, twee hadden geen kaart om tegen te beoordelen, en vijf waren dicht genoeg om op kaartschaal mee te gaan.

De verleidelijke keuze was de vier opnieuw te doen en de vijf te houden. Daniel besliste andersom.

we hebben een consistente look nodig over de conceptbeelden en props en beelden en trailersDaniel, 13 september 2026

Dus worden alle elf opnieuw gemaakt vanaf de beelden, niet vanaf beschrijvingen van de beelden. De vijf die afzonderlijk aanvaardbaar waren, waren dat niet als onderdeel van een set, want een set is wat we werkelijk maken.

Correctie, 20 september. Twee van de drie voorbeelden hierboven kloppen en één niet. Toen we de geleverde trom eindelijk renderden en ernaar keken, het ís een trom — een staande trom op een standaard, het juiste object. Wat er wel mis is, is het materiaal: gelakt oranje, waar de kaart huid, touw en verweerd hout toont. De zinsnede "gietijzeren ketel" kwam uit een geschreven notitie die niemand tegen het model had gehouden, en reisde vervolgens door drie van onze eigen documenten alsof het een waarneming was. De fout die zij beschrijft is echt; het voorbeeld was onjuist. We laten de oorspronkelijke zin hierboven staan in plaats van hem stilletjes te bewerken, want het falen dat zij veroorzaakte — beweren over een beeld zonder het beeld te openen — is precies het falen waar dit bericht over gaat, en wij begingen het tijdens het schrijven ervan.

De conceptkaart voor de Echotrom: een grote staande trom met een huidvel en touwspanning op een uitgehouwen houten standaard, twee stokken op de rand
De Echotrom zoals ontworpen. Deze kaart bestond voordat het model gemaakt werd. Het model kwam terug als een gietijzeren ketel.

Wat er veranderde — "afzonderlijk aanvaardbaar" is geen voldoende als de opdracht één artdirection is. En we inventariseren de conceptbeelden voordat we iets genereren, want het beeld is een betere briefing dan welke beschrijving van het beeld ook.

We hielden een vergelijkingstest die onze eigen aanbeveling omkeerde.

Eerder die week hadden we een van de AI-beeldleveranciers aanbevolen die we gebruiken voor referentieplaten. In die aanbeveling stond een voorbehoud, geschreven door degene die haar deed, en dat voorbehoud was het eerlijke deel: er was nooit iets vergeleken met het alternatief. Er stond dat deze leverancier goed genoeg is op ons werk. Er stond niet dat deze leverancier wint.

Dus dichtten we het gat: dezelfde opdrachten door twee leveranciers, zeven configuraties, elk drie runs — eenentwintig beelden voor ongeveer zevenenveertig credits, ruwweg wat één verkeerde 3D-asset kost om te maken.

De andere leverancier won, en het platenwerk verhuisde. We stonden op het punt de aanbeveling tot standaard te maken zonder haar ooit getest te hebben.

Wat er veranderde — een aanbeveling die nooit tegen een alternatief is gemeten, is een voorkeur. Als we niet kunnen benoemen wat zij verslagen heeft, is er nog niets besloten.

Drie reizigers die goed uitkwamen, en waarom.

Deze drie volgden een andere route dan de elf. De conceptkaart werd omgezet in een schone staande plaat, en de plaat — niet een beschrijving — werd omgezet in het model. Gerigd, met rust en loop.

Dezelfde persoon overleeft alle drie de stappen. De sjaal, de schoudertas en de hoofddoek zijn er aan het eind nog. De met touw gebonden bundel op de rug van de drager kwam eruit als echte geometrie in plaats van een geschilderde suggestie.

Dat is het hele argument om deze pijplijn vanuit beeld te sturen in plaats van vanuit tekst, en daarom worden de elf opnieuw gedaan.

Conceptkaart voor de wegloper: een reiziger in een mantel met capuchon over een indigo tuniek, met een schoudertas en een wandelstaf
1 · De conceptkaart. Een tekening.
De afgeronde spelasset van de wegloper: hetzelfde personage als gerigd 3D-model
2 · De afgeronde spelasset. Dezelfde man — het grijsdoorschoten haar, de ongeverfde wollen mantel, de indigo tuniek, de schoudertas en de staf zijn allemaal meegekomen. Alleen de houding veranderde.

Onze metgezel is een vogel, en de animatiebibliotheek bleek er geen te bevatten.

Kofa is de sankofa-vogel. Hij werd gebouwd voor Agoro Camp en hij hoort bij de studio in plaats van bij één spel — dezelfde vogel, dezelfde look, andere vermogens in elk — zodat hem naar deze weg brengen ons niets kost aan ontwerp. Zijn lus is ophalen, onthullen, verkennen, en verkennen ontgrendelt alleen op grond waarvan je het verleden al hebt opgehaald. De toekomst is niet zichtbaar zolang het verleden niet gekend is. Die regel ís het personage, geen sfeertekst.

Het gouden ei dat hij draagt is daarvan de aflezing: leeg betekent dat het verleden van deze plek nog verloren is. Dat werkt omdat het ei als een werkelijk los object uit de mesh kwam, zodat het spel het echt kan verlichten in plaats van het slechts te suggereren.

De mesh is af — getextureerd, met een rig van zesenvijftig botten. Toen openden we de animatiebibliotheek waar we vluchtcycli uit wilden halen en ontdekten dat zij een tweebenige vogel als aviair classificeert, en dat haar aviaire sectie leeg is. Niet dun. Leeg.

Elke animatie die hij krijgt wordt dus met de hand gemaakt. Dat is een reële kostenpost en die staat nu in het plan in plaats van in een verrassing.

Update, 13 september. Toen we hem wilden poseren, versplinterde hij. De rig miste niet alleen zijn animaties — zijn skelet zat op de verkeerde plek. We maten elk bot tegen het vlees dat het werkelijk aanstuurt: de botten zaten er gemiddeld bijna een lichaamslengte vandaan, en het bot van de snavel zat verder van de snavel dan de vogel hoog is. Twee menselijke personages, gerigd door hetzelfde gereedschap, maten vijfentwintig keer beter, en zo wisten we dat het aan de rig lag en niet aan onze meetlat.

De gewichten — welk vertex welk bot volgt — waren in orde. Die hielden we dus en we brachten elk bot terug in zijn eigen lichaam, waarbij we elk gewricht afleidden uit het gebied waar twee botten invloed delen. Daarmee stond hij. De afbeelding hieronder is de eerste die ooit van dit personage heeft bestaan.

Toen de tweede fout: stukken van het gouden ei waren vastgemaakt aan een teen, elk voor een kwart van hun gewicht, aan de andere kant van het lichaam. In rust is dat onzichtbaar, want in rust zijn alle botten het eens. Zodra zijn kop draaide, scheurde het ei in scherven. Beide fouten verscholen zich in de enige houding waar iemand ooit naar kijkt.

Kofa staand: een grote blauw-gouden vogel met adinkra-patroon over hals en lichaam, een lange gebogen hals, en een gouden ei in de snavel
1 · Staand, voor het eerst. Dezelfde mesh die de hele week onbruikbaar was geweest. Er is niets opnieuw gemodelleerd — alleen het skelet is teruggezet waar het hoorde.
Kofa die de sankofa-terugblik uitvoert: de hals boogt omhoog en achterover over de ruggengraat, de kop omgedraaid, het gouden ei meegedragen
2 · De beweging waarvoor hij bestaat. De nek boogt achterover over de ruggengraat, de kop draait om, het ei gaat mee. Ga terug en haal het.

Hij heeft nu drie met de hand gemaakte animaties — een loop, een rust, en de terugblik hierboven. Ze zitten in het personagebestand; hij zit nog niet in de speelbare build.

Wat er veranderde — we controleren nu of een gereedschap het specifieke ding kan voordat een asset ervan afhangt. "Het heeft een animatiebibliotheek" en "het heeft een animatiebibliotheek hiervoor" zijn verschillende zinnen.

En — onze eerste terugblik doorstond elke controle die we geschreven hadden en was nog steeds onbruikbaar: de nek knoopte zichzelf vast en de kop eindigde begraven in een vleugel. De controles maten of de snavel zijn doel bereikte en of er iets doorsneed. Geen van beide kon een silhouetzien, en dat is het hele punt van die houding. We testen nu of de omtrek zichzelf kruist, en elke rand van de mesh tegen zijn oorspronkelijke lengte — en we kijken naar het beeld. Een controle die niet kan waarnemen hoe iets faalt, zal het als in orde certificeren.

Wat spelers al veranderd hebben

Twee hiervan komen uit onze uitgebrachte spellen in plaats van uit Agoro Road — maar ze veranderden hoe dit spel gebouwd wordt, dus horen ze hier thuis.

De winkel die niets wilde verkopen

“Wieso kann ich die nicht kaufen?”

Een tester in Duitsland stuurde één regel over Agoro Bounce: waarom kan ik deze niet kopen? De winkel toonde binnenkort bij alles.

De winkel was niet stuk. De openbare testlink deelde nog altijd de allereerste build uit — gemaakt voordat de winkel bestond. Elke nieuwere build was alleen naar de besloten groep gegaan. Hij had gelijk, en hij keek naar iets van tien builds oud.

Wat er veranderde

We gingen er niet langer van uit dat de openbare link serveert wat we het laatst geüpload hebben. Hij heeft zijn eigen build en moet bewust naar de nieuwe gewezen worden. We openen nu de link die een tester werkelijk krijgt.

Het naamveld dat de letter S opat

Typ “Sam”. Krijg “am”.

Daniel liep hier tegenaan op de live site van Agoro Bounce. De sneltoetsen van het spel luisterden nog terwijl het naamveld focus had, en s was een sneltoets — dus ging de letter naar het spel in plaats van in het veld.

We repareerden het die ochtend. Elf uur later meldde hij dat het nog steeds stuk was, en dat was het. De reparatie zat in de code en niet op de site: een latere publicatie was vertrokken vanaf een oudere kopie van het project en had stilletjes de oude versie teruggezet.

Wat er veranderde

Gerepareerd is niet uitgeleverd. We laden de echte pagina en bevestigen dat de reparatie zit in wat de server werkelijk serveert, voordat iemand zegt dat het klaar is.

Over dit logboek

Agoro Road is in ontwikkeling en gratis te spelen in de browser terwijl het gemaakt wordt. Dit logboek hoort bij hoe we in het openbaar bouwen tijdens Shipaton 2026; onze uitgebrachte apps zijn Agoro Pocket, Agoro Bounce en Lanternlight, en elk heeft zijn eigen vermelding. Niets op deze pagina is een aankondiging van een release.

Bekijk de rest van wat we maken →