
Writing · 12 Oct 2026
Outcast 99
A hobby project at the frontier of what is possible
Outcast (1999) is a work of art, and one of my favourite games ever: Cutter Slade, the planet Adelpha, its voxel landscapes and its orchestral score. In three days, with a team of AI agents, I brought it natively to my Linux laptop, iPad, iPhone and Apple Vision Pro, in stereoscopic 3D. A hobby project, nothing for sale, written with deep respect for the people who made it, and for everybody who still dreams of Adelpha.
A work of art, ahead of its time
Outcast was made by Appeal in Belgium and released in 1999. It was years ahead of its time. A free, living open world, two years before Grand Theft Auto III. A landscape engine that drew rolling hills, reflective water, depth of field and bump mapping entirely in software, on a Pentium III. A score by Lennie Moore, performed by the Moscow Symphony Orchestra and choir, at a time when orchestral game music was rare. GameSpot named it the adventure game of the year.
And then there is the AI. Appeal built its own engine for it, called GAIA: Game Artificial Intelligence with Agents. Every inhabitant of Adelpha was a set of autonomous agents with skills like sight, hearing and acrobatics, cooperating and even competing to get a task done. Soldiers sound their horns, try to flank you and search for you when you disappear. The Talan remember how you treated them, and help you or turn their backs on you. Even saving the game is part of the world: you squeeze your Gaamsaav, it glows and makes a sound, and the guards come to look. In 1999!
I bought it back in the day, more than once. Years later the original founders, Yann Robert, Franck Sauer and Yves Grolet, bought the rights back and rebuilt the game from its original source code as Outcast 1.1, with higher resolutions and rendering on multiple threads. That is the version I bought again on GOG, and the one this project starts from. If you never played it: buy Outcast 1.1 on GOG. And if you want to see where Adelpha went next, there is Outcast: A New Beginning, made by the same studio in 2024.

Let me be clear from the start: this is a personal hobby project, a tribute. The port is not released and will not be without the official approval of its makers. No code, no game data and no analysis leaves my house. You need your own copy of the game, always.
Cutter, my old friend
It started on a Sunday morning on my Framework 12 running Omarchy Linux. Outcast 1.1 ran under Wine, a compatibility layer for Windows programs, at about 21 frames per second. It had been a while since I saw my friend Cutter Slade. Then the question came: how far can we go?

Further than I thought. Instead of emulating the game, the agents turned the Windows executable into portable C code: a static recompilation. Every one of its 66,968 functions became C, about 48 MB of it. Around that sits a hand-written runtime that plays the part of Windows: memory, files, threads, DirectInput, DirectSound, the graphics window. NO WINE, NO EMULATOR!

How the lifting works
The lifter reads each x86 instruction and writes the C that does exactly the same. That sounds simple until you meet an engine as clever as Appeal's. It uses MMX and SSE instructions for its landscapes, x87 floating point with its own rounding modes (the first native build had colour glitches until those were modelled), and 62 places where the code rewrites itself while it runs, a classic trick from an era when every cycle counted. All of those needed their own extensions on top of the open source lifter we started from. To be sure the C does what the processor did, every instruction form the game uses was tested against a CPU emulator, on Intel and on ARM.
The music turned out to be one 68-minute recording that the engine plays in time ranges, with its own fades. So the runtime got a small stand-in for the Windows media layer that plays those ranges into the sound mixer. The first time Lennie Moore's score came back in the native build, it was kind of epic.
Speed came from measuring, every step. Two hot spots on the game's main thread got a native replacement: the decompressor for the game's data packs and the routine that paints the sky (2.15 ms down to 0.37 ms per frame, checked byte for byte against the original over 1,200 frames). MMX became real vector code. And Outcast 1.1 already spreads its rendering over several threads, a big reason why it flies on modern chips. On the Framework 12 the game went from 21 frames per second under Wine to about 76 natively. On the iPad Pro it plays at around 90.
A team of agents
None of this is typed by hand. Three Claude Code sessions worked together like a small studio: one on the Linux laptop for the recompiler and the runtime, one on the MacBook for Xcode and the iPad, iPhone and Vision Pro builds, and one on the machine in my homelab coordinating the two, relaying notes day and night. I played, tested and decided. It is the same multi-agent setup that drives the native development pipelines I built for apps like Contact, and Outcast pushed it harder than anything before. There is a nice symmetry in it: a game whose characters were driven by agents in 1999, carried to new devices by agents in 2026.

That also means tokens. After seven hours of non-stop iterating it was 180 million, at the end of day one 278 million, and on day three more than 1.4 billion. So much for a small hobby project. But I learned a ton about game engines, interaction, and the reinterpretation of a work of art.
Speed is the concept
A game where you move through a world is a special kind of software. In a web page a few milliseconds of delay go unnoticed. In a game you feel every one of them: the controls get mushy, the camera lags, the magic is gone. I learned that with Thinc Ahead 3D and Protect Your Eggs.
In virtual reality the margin is even smaller. On the Vision Pro the image has to follow your head, both eyes need their own picture, and any stutter goes straight to your stomach. That demands the very best of a development pipeline: measure every frame, never guess, and keep the way back open. Every optimisation has a switch that restores the original behaviour, byte for byte.
Adelpha in 3D
Outcast draws one flat image per frame. To get stereoscopic 3D, the agents went looking in the game's memory and found what Appeal's engine keeps for every pixel: its distance, right next to its colour. With that, the GPU builds a picture for each eye: every pixel moves left or right by its depth, the gaps are filled, and the HUD stays at screen depth. It costs about 1.2 ms per frame on the GPU, and the landscapes from 1999 suddenly have real depth.


Watch the footage below: Outcast on Apple Vision Pro, played with a PlayStation 5 DualSense.
On the Vision Pro the game runs as a native visionOS app. The canvas hangs in your room in 3D, and in the immersive mode the game's own sky panorama surrounds you as a dome that turns along with Cutter. Standing under the moons of Adelpha is quite intense, and I love it.


A native interface
Stereo has a catch: the game draws its menus and conversation texts into the same flat picture, so in 3D they get scattered into the scene. The only reliable fix was to give the interface its own layer. The runtime reads the engine's own conversations, backpack, notes, weapons, map and menus, and the apps draw them natively: real buttons you tap, look at or select with the controller. The words, the choices and the logic stay Appeal's, with the same tone and pace. The backpack knows all 105 item kinds, with the game's own icons and captions.



Even the letters are the game's own: the original 1999 bitmap font traced into smooth vector outlines, with the system font for the small text.

Controls
Every device plays differently, so every device got its own controls:
- iPad: the Magic Keyboard trackpad turns the camera, the keyboard moves Cutter. Detach the keyboard and a touch overlay appears within seconds: a stick for moving, a look stick that keeps turning when you hold it at its rim, and buttons for action, fire, jump and aim.
- iPhone: touch, in landscape, with the native interface tuned for a small screen.
- Vision Pro: the PlayStation 5 DualSense, with PlayStation glyphs on the buttons and the touchpad click for the map.
- Linux: keyboard and mouse, like in 1999.

One save, every device
I want to stop playing on the laptop and continue on the iPad, or in the headset, without thinking. So the agents built a save syncer: a small service at game.willem.com that keeps the newest save. Squeeze the Gaamsaav and the slot is sent along, checked with a SHA-256 hash; at start the game fetches a newer save from another device and continues right where you left off, the way the "Continue" button of the GOG launcher does. The newest save always wins and the history is kept. It works because the save files are byte for byte the same on every device: the engine is the same everywhere.

One code base, four platforms
The C runtime is shared: Linux on the main branch, Apple on its own branch that follows the main line. The iPad and iPhone share one app; the Vision Pro has its own native app in Swift and RealityKit around the same engine. The name Outcast 99 is a nod to my own games Snake '97 and Block 89.
| Device | Plays with | Speed |
|---|---|---|
| Framework 12, Linux | Keyboard and mouse | About 76 fps (Wine: 21) |
| iPad Pro M4 | Trackpad, keyboard or touch | Around 90 fps |
| iPhone | Touch | Smooth, in landscape |
| Apple Vision Pro | DualSense | Stereoscopic 3D, immersive sky |
Conclusion
This project is a love letter to a game that still feels like magic, 27 years later. Everything that makes it special was there in 1999: the world, the agents, the music, the story. All I did was carry it to new glass. Thank you Yann Robert, Franck Sauer, Yves Grolet and everybody at Appeal for making Outcast. If you have never visited Adelpha, now is a good time: buy the game, turn up the music, and say hi to the Talan for me. Ulukai, IN 3D!