Outcast 99

Schrijven · 12 okt 2026

Outcast 99

Een hobbyproject op de grens van wat kan

Outcast (1999) is een kunstwerk, en een van mijn favoriete games ooit: Cutter Slade, de planeet Adelpha, de voxel-landschappen en de orkestmuziek. In drie dagen bracht ik het, met een team van AI-agents, native naar mijn Linux-laptop, iPad, iPhone en Apple Vision Pro, in stereoscopisch 3D. Een hobbyproject, niets te koop, geschreven met diep respect voor de mensen die het maakten, en voor iedereen die nog steeds droomt van Adelpha.

Een kunstwerk, zijn tijd ver vooruit

Outcast werd gemaakt door Appeal in België en verscheen in 1999. Het was zijn tijd jaren vooruit. Een vrije, levende open wereld, twee jaar vóór Grand Theft Auto III. Een landschapsengine die glooiende heuvels, spiegelend water, scherptediepte en bump mapping volledig in software tekende, op een Pentium III. Muziek van Lennie Moore, gespeeld door het Moscow Symphony Orchestra en koor, in een tijd dat orkestmuziek in games zeldzaam was. GameSpot riep het uit tot adventure game van het jaar.

En dan de AI. Appeal bouwde er een eigen engine voor, GAIA: Game Artificial Intelligence with Agents. Elke bewoner van Adelpha was een verzameling zelfstandige agents met vaardigheden als zien, horen en acrobatiek, die samenwerkten en zelfs met elkaar wedijverden om een taak te volbrengen. Soldaten blazen op hun hoorn, proberen je te flankeren en gaan je zoeken als je verdwijnt. De Talan onthouden hoe je ze behandelde, en helpen je of keren je de rug toe. Zelfs opslaan hoort bij de wereld: je knijpt in je Gaamsaav, die gloeit en geluid maakt, en de wachters komen kijken. In 1999!

Ik kocht het destijds, meer dan eens. Jaren later kochten de oprichters van het eerste uur, Yann Robert, Franck Sauer en Yves Grolet, de rechten terug en bouwden het spel opnieuw vanuit de originele broncode als Outcast 1.1, met hogere resoluties en rendering over meerdere threads. Die versie kocht ik opnieuw op GOG, en daar begint dit project. Nooit gespeeld? Koop Outcast 1.1 op GOG. En wie wil zien waar Adelpha daarna heen ging: Outcast: A New Beginning, gemaakt door dezelfde studio in 2024.

Outcast 1.1 in mijn GOG-collectie. Koop je eigen exemplaar!
Outcast 1.1 in mijn GOG-collectie. Koop je eigen exemplaar!

Laat ik vanaf het begin duidelijk zijn: dit is een persoonlijk hobbyproject, een eerbetoon. De port is niet uitgebracht en wordt dat ook niet zonder officiële toestemming van de makers. Geen code, geen speldata en geen analyse verlaat mijn huis. Je hebt altijd je eigen exemplaar van het spel nodig.

Cutter, mijn oude vriend

Het begon op een zondagochtend op mijn Framework 12 met Omarchy Linux. Outcast 1.1 draaide onder Wine, een compatibiliteitslaag voor Windows-programma's, met zo'n 21 beelden per seconde. Het was een tijd geleden dat ik mijn vriend Cutter Slade zag. Toen kwam de vraag: hoe ver kunnen we gaan?

Cutter Slade op mijn Framework 12, de eerste ochtend
Cutter Slade op mijn Framework 12, de eerste ochtend

Verder dan ik dacht. In plaats van het spel te emuleren, zetten de agents het Windows-programma om in draagbare C-code: een statische hercompilatie. Elk van de 66.968 functies werd C, zo'n 48 MB. Daaromheen zit een met de hand geschreven runtime die de rol van Windows speelt: geheugen, bestanden, threads, DirectInput, DirectSound, het grafische venster. GEEN WINE, GEEN EMULATOR!

In gesprek met Zokrym, native op Linux: geen Wine, geen emulator
In gesprek met Zokrym, native op Linux: geen Wine, geen emulator

Hoe het vertalen werkt

De vertaler leest elke x86-instructie en schrijft de C die precies hetzelfde doet. Dat klinkt eenvoudig, tot je een engine tegenkomt die zo slim is als die van Appeal. Die gebruikt MMX- en SSE-instructies voor de landschappen, x87-rekenwerk met eigen afrondingsmodi (de eerste native versie had kleurfouten tot die waren nagebouwd), en 62 plekken waar de code zichzelf herschrijft terwijl hij draait, een klassieke truc uit een tijd waarin elke klokcyclus telde. Voor dat alles kwamen er eigen uitbreidingen bovenop de open source vertaler waarmee we begonnen. Om zeker te weten dat de C doet wat de processor deed, is elke instructievorm die het spel gebruikt getest tegen een CPU-emulator, op Intel en op ARM.

De muziek bleek één opname van 68 minuten die de engine in tijdvakken afspeelt, met eigen fades. Dus kreeg de runtime een klein stand-in voor de Windows-medialaag die die tijdvakken in de geluidsmixer speelt. De eerste keer dat de muziek van Lennie Moore terugkwam in de native versie, was dat behoorlijk episch.

Snelheid kwam van meten, elke stap. Twee hotspots op de hoofdthread van het spel kregen een native vervanger: de uitpakker voor de datapakketten van het spel en de routine die de lucht schildert (van 2,15 naar 0,37 ms per beeld, byte voor byte vergeleken met het origineel over 1.200 beelden). MMX werd echte vectorcode. En Outcast 1.1 verdeelt het tekenwerk al over meerdere threads, een belangrijke reden dat het vliegt op moderne chips. Op de Framework 12 ging het spel van 21 beelden per seconde onder Wine naar zo'n 76 native. Op de iPad Pro speelt het rond de 90.

Een team van agents

Niets hiervan is met de hand getypt. Drie Claude Code-sessies werkten samen als een kleine studio: één op de Linux-laptop voor de vertaler en de runtime, één op de MacBook voor Xcode en de versies voor iPad, iPhone en Vision Pro, en één op de machine in mijn homelab die de twee coördineerde en dag en nacht berichten doorgaf. Ik speelde, testte en besliste. Het is dezelfde multi-agent setup die de native ontwikkelstraten aandrijft die ik bouwde voor apps als Contact, en Outcast duwde die harder dan ooit. Er zit een mooie symmetrie in: een game waarvan de personages in 1999 door agents werden aangestuurd, in 2026 door agents naar nieuwe apparaten gebracht.

Dag één: een paar keer van mijn stoel gevallen
Dag één: een paar keer van mijn stoel gevallen

Dat betekent ook tokens. Na zeven uur non-stop itereren waren het er 180 miljoen, aan het eind van dag één 278 miljoen, en op dag drie ruim 1,4 miljard. Tot zover een klein hobbyproject. Maar ik leerde ontzettend veel over game-engines, interactie en het opnieuw interpreteren van een kunstwerk.

Snelheid is het concept

Een game waarin je door een wereld beweegt, is een bijzonder soort software. Op een webpagina merkt niemand een paar milliseconden vertraging. In een game voel je ze allemaal: de besturing wordt sponzig, de camera loopt achter, de magie is weg. Dat leerde ik met Thinc Ahead 3D en Protect Your Eggs.

In virtual reality is de marge nog kleiner. Op de Vision Pro moet het beeld je hoofd volgen, heeft elk oog een eigen beeld nodig, en gaat elke hapering rechtstreeks naar je maag. Dat vraagt het allerbeste van een ontwikkelstraat: elk beeld meten, nooit gokken, en de weg terug openhouden. Elke optimalisatie heeft een schakelaar die het originele gedrag herstelt, byte voor byte.

Adelpha in 3D

Outcast tekent één plat beeld per frame. Voor stereoscopisch 3D zochten de agents in het geheugen van het spel en vonden wat de engine van Appeal voor elke pixel bijhoudt: de afstand, direct naast de kleur. Daarmee bouwt de GPU een beeld per oog: elke pixel schuift naar links of rechts naar zijn diepte, de gaten worden gevuld, en de HUD blijft op schermdiepte. Dat kost zo'n 1,2 ms per beeld op de GPU, en de landschappen uit 1999 hebben ineens echte diepte.

Het eerste native canvas op Apple Vision Pro
Het eerste native canvas op Apple Vision Pro
Het canvas in mijn kamer, met het native menu ernaast
Het canvas in mijn kamer, met het native menu ernaast

Bekijk de beelden hieronder: Outcast op Apple Vision Pro, gespeeld met een PlayStation 5 DualSense.

Op de Vision Pro draait het spel als native visionOS-app. Het canvas hangt in 3D in je kamer, en in de immersieve modus omringt het eigen luchtpanorama van het spel je als een koepel die meedraait met Cutter. Staan onder de manen van Adelpha is behoorlijk intens, en ik vind het geweldig.

Immersieve modus: de lucht van Adelpha overal om je heen, manen inbegrepen
Immersieve modus: de lucht van Adelpha overal om je heen, manen inbegrepen
Immersieve modus op een tropisch eiland van Adelpha
Immersieve modus op een tropisch eiland van Adelpha

Een native interface

Stereo heeft een addertje: het spel tekent zijn menu's en gespreksteksten in hetzelfde platte beeld, dus in 3D raken ze verstrooid in de scène. De enige betrouwbare oplossing was de interface een eigen laag te geven. De runtime leest de eigen gesprekken, rugzak, notities, wapens, kaart en menu's van de engine, en de apps tekenen ze native: echte knoppen die je aantikt, aankijkt of met de controller kiest. De woorden, de keuzes en de logica blijven van Appeal, met dezelfde toon en hetzelfde tempo. De rugzak kent alle 105 soorten voorwerpen, met de eigen iconen en namen uit het spel.

Een gesprek, met de native tekstlaag in het groen
Een gesprek, met de native tekstlaag in het groen
De gespreksring als echte knoppen
De gespreksring als echte knoppen
Het wapenscherm, native getekend
Het wapenscherm, native getekend

Zelfs de letters zijn van het spel zelf: het originele bitmaplettertype uit 1999, overgetrokken tot vloeiende vectorcontouren, met het systeemlettertype voor de kleine tekst.

Vier manieren om het lettertype uit 1999 over te trekken: de vloeiende contour won
Vier manieren om het lettertype uit 1999 over te trekken: de vloeiende contour won

Besturing

Elk apparaat speelt anders, dus elk apparaat kreeg zijn eigen besturing:

  • iPad: het trackpad van het Magic Keyboard draait de camera, het toetsenbord beweegt Cutter. Haal het toetsenbord los en binnen een paar seconden verschijnt een aanraakbesturing: een stick om te lopen, een kijkstick die blijft draaien als je hem aan de rand vasthoudt, en knoppen voor actie, vuren, springen en richten.
  • iPhone: aanraken, in liggende stand, met de native interface afgestemd op een klein scherm.
  • Vision Pro: de PlayStation 5 DualSense, met PlayStation-symbolen op de knoppen en een klik op het touchpad voor de kaart.
  • Linux: toetsenbord en muis, zoals in 1999.
De PlayStation 5 DualSense, de controller voor de Vision Pro
De PlayStation 5 DualSense, de controller voor de Vision Pro

Eén save, elk apparaat

Ik wil stoppen op de laptop en verder spelen op de iPad, of in de headset, zonder na te denken. Dus bouwden de agents een save-syncer: een kleine dienst op game.willem.com die de nieuwste save bewaart. Knijp in de Gaamsaav en het slot gaat mee, gecontroleerd met een SHA-256-hash; bij het starten haalt het spel een nieuwere save van een ander apparaat op en ga je verder waar je was, zoals de "Continue"-knop van de GOG-launcher dat doet. De nieuwste save wint altijd en de geschiedenis blijft bewaard. Het werkt omdat de savebestanden op elk apparaat byte voor byte gelijk zijn: de engine is overal dezelfde.

Verder waar je was: dezelfde save op de iPad
Verder waar je was: dezelfde save op de iPad

Eén codebase, vier platforms

De C-runtime is gedeeld: Linux op de hoofdtak, Apple op een eigen tak die de hoofdlijn volgt. iPad en iPhone delen één app; de Vision Pro heeft een eigen native app in Swift en RealityKit rond dezelfde engine. De naam Outcast 99 is een knipoog naar mijn eigen games Snake '97 en Block 89.

Apparaat Speelt met Snelheid
Framework 12, Linux Toetsenbord en muis Zo'n 76 fps (Wine: 21)
iPad Pro M4 Trackpad, toetsenbord of aanraken Rond de 90 fps
iPhone Aanraken Vloeiend, liggend
Apple Vision Pro DualSense Stereoscopisch 3D, immersieve lucht

Conclusie

Dit project is een liefdesbrief aan een game die na 27 jaar nog steeds voelt als magie. Alles wat het bijzonder maakt, was er al in 1999: de wereld, de agents, de muziek, het verhaal. Ik heb het alleen naar nieuw glas gedragen. Dank je wel Yann Robert, Franck Sauer, Yves Grolet en iedereen bij Appeal voor het maken van Outcast. Ben je nog nooit op Adelpha geweest, dan is dit een goed moment: koop het spel, zet de muziek hard, en zeg de Talan gedag van me. Ulukai, IN 3D!

OUTCAST 1.1 OP GOG.COM

← Meer verhalen