Outcast 99

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.

Outcast 1.1 in my GOG collection. Buy your own copy!
Outcast 1.1 in my GOG collection. Buy your own copy!

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?

Cutter Slade on my Framework 12, the first morning
Cutter Slade on my Framework 12, the first morning

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!

Talking to Zokrym, running natively on Linux: no Wine, no emulator
Talking to Zokrym, running natively on Linux: 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.

Day one: falling from my chair a few times
Day one: falling from my chair a few times

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.

The first native canvas on Apple Vision Pro
The first native canvas on Apple Vision Pro
The canvas in my room, with the native menu beside it
The canvas in my room, with the native menu beside it

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.

Immersive mode: the sky of Adelpha all around, moons included
Immersive mode: the sky of Adelpha all around, moons included
Immersive mode on a tropical island of Adelpha
Immersive mode on a tropical island of Adelpha

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.

A conversation, with the native text layer in green
A conversation, with the native text layer in green
The conversation ring as real buttons
The conversation ring as real buttons
The weapons screen, drawn natively
The weapons screen, drawn natively

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.

Four ways to trace the 1999 font: the smooth outline won
Four ways to trace the 1999 font: the smooth outline won

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.
The PlayStation 5 DualSense, the controller for Vision Pro
The PlayStation 5 DualSense, the controller for Vision Pro

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.

Continue where you left off: the same save on the iPad
Continue where you left off: the same save on the iPad

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!

OUTCAST 1.1 ON GOG.COM

← More writing