Sprachen: English · Nederlands · Deutsch · Español · Français · Italiano · Português · Papiamentu · Frysk

Index / Beiträge / Outcast 99

Outcast 99

Ein Hobbyprojekt an der Grenze des Machbaren

Veröffentlicht
Aktualisiert
(erstellt )
Geschrieben von
Willem L. Middelkoop
Themen
AI · Spiel · Programmierung · retro
Menschliche Version dieses Beitrags
https://willem.com/de/2026-10-12_outcast-99/
English
Outcast 99
Nederlands
Outcast 99
Español
Outcast 99
Français
Outcast 99
Italiano
Outcast 99
Português
Outcast 99
Papiamentu
Outcast 99
Frysk
Outcast 99
Sprachen
Aus dem englischen Original von einem Sprachmodell in zwei Durchgängen (Übersetzung und Korrektur) mit Glossar und Rechtschreibprüfung übersetzt; noch nicht von einem Muttersprachler gelesen.

Zusammenfassung

Outcast (1999) ist ein Kunstwerk und eines meiner liebsten Spiele überhaupt: Cutter Slade, der Planet Adelpha, seine Voxel-Landschaften und sein orchestraler Soundtrack. In drei Tagen habe ich es mit einem Team aus KI-Agenten nativ auf meinen Linux-Laptop, iPad, iPhone und Apple Vision Pro gebracht, in stereoskopischem 3D. Ein Hobbyprojekt, nichts zu verkaufen, mit tiefem Respekt für die Menschen geschrieben, die es gemacht haben, und für alle, die noch immer von Adelpha träumen.

Volltext

Ein Kunstwerk, seiner Zeit voraus

Outcast wurde von Appeal in Belgien gemacht und 1999 veröffentlicht. Es war seiner Zeit um Jahre voraus. Eine freie, lebendige offene Welt, zwei Jahre vor Grand Theft Auto III. Eine Landschafts-Engine, die sanfte Hügel, spiegelndes Wasser, Tiefenunschärfe und Bump Mapping komplett in Software zeichnete, auf einem Pentium III. Ein Soundtrack von Lennie Moore, eingespielt vom Moscow Symphony Orchestra und Chor, zu einer Zeit, in der orchestrale Spielemusik selten war. GameSpot kürte es zum Adventure des Jahres.

Und dann ist da die KI. Appeal baute dafür eine eigene Engine namens GAIA: Game Artificial Intelligence with Agents. Jeder Bewohner von Adelpha war eine Menge autonomer Agenten mit Fähigkeiten wie Sehen, Hören und Akrobatik, die zusammenarbeiteten und sogar miteinander konkurrierten, um eine Aufgabe zu erledigen. Soldaten blasen ihre Hörner, versuchen dich zu umgehen und suchen nach dir, wenn du verschwindest. Die Talan merken sich, wie du sie behandelt hast, und helfen dir oder wenden dir den Rücken zu. Sogar das Speichern gehört zur Welt: Du drückst deinen Gaamsaav, er leuchtet und gibt einen Ton von sich, und die Wachen kommen nachsehen. Im Jahr 1999!

Ich habe es damals gekauft, mehr als einmal. Jahre später kauften die ursprünglichen Gründer, Yann Robert, Franck Sauer und Yves Grolet, die Rechte zurück und bauten das Spiel aus seinem originalen Quellcode als Outcast 1.1 neu auf, mit höheren Auflösungen und Rendering auf mehreren Threads. Das ist die Version, die ich bei GOG noch einmal gekauft habe und von der dieses Projekt ausgeht. Falls du es nie gespielt hast: kauf Outcast 1.1 bei GOG. Und wenn du sehen willst, wie es mit Adelpha weiterging, gibt es Outcast: A New Beginning, 2024 vom selben Studio gemacht.

Outcast 1.1 in meiner GOG-Sammlung. Kauf dir deine eigene Kopie!
Outcast 1.1 in meiner GOG-Sammlung. Kauf dir deine eigene Kopie!

Damit das von Anfang an klar ist: Das hier ist ein persönliches Hobbyprojekt, eine Hommage. Der Port ist nicht veröffentlicht und wird es ohne die offizielle Zustimmung seiner Macher auch nicht. Kein Code, keine Spieldaten und keine Analyse verlassen mein Haus. Du brauchst immer deine eigene Kopie des Spiels.

Cutter, mein alter Freund

Es begann an einem Sonntagmorgen auf meinem Framework 12 mit Omarchy Linux. Outcast 1.1 lief unter Wine, einer Kompatibilitätsschicht für Windows-Programme, mit etwa 21 Bildern pro Sekunde. Ich hatte meinen Freund Cutter Slade schon lange nicht mehr gesehen. Dann kam die Frage: Wie weit können wir gehen?

Cutter Slade auf meinem Framework 12, am ersten Morgen
Cutter Slade auf meinem Framework 12, am ersten Morgen

Weiter, als ich dachte. Statt das Spiel zu emulieren, haben die Agenten die Windows-Programmdatei in portablen C-Code verwandelt: eine statische Rekompilierung. Jede einzelne ihrer 66.968 Funktionen wurde zu C, etwa 48 MB davon. Drumherum sitzt eine handgeschriebene Laufzeit, die die Rolle von Windows spielt: Speicher, Dateien, Threads, DirectInput, DirectSound, das Grafikfenster. KEIN WINE, KEIN EMULATOR!

Gespräch mit Zokrym, nativ unter Linux: kein Wine, kein Emulator
Gespräch mit Zokrym, nativ unter Linux: kein Wine, kein Emulator

Wie das Lifting funktioniert

Der Lifter liest jede x86-Instruktion und schreibt das C, das exakt dasselbe tut. Das klingt einfach, bis man auf eine Engine so clever wie die von Appeal trifft. Sie nutzt MMX- und SSE-Instruktionen für ihre Landschaften, x87-Fließkomma mit eigenen Rundungsmodi (der erste native Build hatte Farbfehler, bis diese nachgebildet waren) und 62 Stellen, an denen sich der Code während der Laufzeit selbst umschreibt, ein klassischer Trick aus einer Zeit, in der jeder Zyklus zählte. Für all das brauchten wir eigene Erweiterungen auf dem Open-Source-Lifter, mit dem wir gestartet sind. Um sicher zu sein, dass das C tut, was der Prozessor tat, wurde jede Instruktionsform, die das Spiel nutzt, gegen einen CPU-Emulator getestet, auf Intel und auf ARM.

Die Musik stellte sich als eine einzige 68-minütige Aufnahme heraus, die die Engine in Zeitbereichen abspielt, mit eigenen Überblendungen. Also bekam die Laufzeit einen kleinen Ersatz für die Windows-Medienschicht, der diese Bereiche in den Soundmixer spielt. Als Lennie Moores Score zum ersten Mal im nativen Build zurückkam, war das schon ziemlich episch.

Tempo kam vom Messen, bei jedem Schritt. Zwei Hotspots im Hauptthread des Spiels bekamen einen nativen Ersatz: der Dekompressor für die Datenpakete des Spiels und die Routine, die den Himmel malt (von 2,15 ms auf 0,37 ms pro Frame, Byte für Byte gegen das Original über 1.200 Frames geprüft). MMX wurde zu echtem Vektorcode. Und Outcast 1.1 verteilt sein Rendering bereits auf mehrere Threads, ein wichtiger Grund, warum es auf modernen Chips fliegt. Auf dem Framework 12 stieg das Spiel von 21 Bildern pro Sekunde unter Wine auf etwa 76 nativ. Auf dem iPad Pro läuft es mit rund 90.

Ein Team aus Agenten

Nichts davon ist von Hand getippt. Drei Sitzungen von Claude Code arbeiteten zusammen wie ein kleines Studio: eine auf dem Linux-Laptop für den Rekompiler und die Laufzeit, eine auf dem MacBook für Xcode und die Builds für iPad, iPhone und Vision Pro, und eine auf dem Computer in meinem Homelab, die die beiden koordinierte und Notizen Tag und Nacht weiterreichte. Ich habe gespielt, getestet und entschieden. Es ist dasselbe Multi-Agenten-Setup, das die nativen Entwicklungs-Pipelines antreibt, die ich für Apps wie Contact gebaut habe, und Outcast hat es härter gefordert als alles zuvor. Es hat eine schöne Symmetrie: ein Spiel, dessen Figuren 1999 von Agenten gesteuert wurden, 2026 von Agenten auf neue Geräte gebracht.

Tag eins: ein paar Mal vom Stuhl gefallen
Tag eins: ein paar Mal vom Stuhl gefallen

Das heißt auch Tokens. Nach sieben Stunden ununterbrochenem Iterieren waren es 180 Millionen, am Ende von Tag eins 278 Millionen, und an Tag drei mehr als 1,4 Milliarden. So viel zu einem kleinen Hobbyprojekt. Aber ich habe enorm viel über Spiele-Engines, Interaktion und die Neuinterpretation eines Kunstwerks gelernt.

Tempo ist das Konzept

Ein Spiel, in dem du dich durch eine Welt bewegst, ist eine besondere Art von Software. Auf einer Webseite fallen ein paar Millisekunden Verzögerung nicht auf. In einem Spiel spürst du jede einzelne: Die Steuerung wird schwammig, die Kamera hängt hinterher, der Zauber ist weg. Das habe ich mit Thinc Ahead 3D und Protect Your Eggs gelernt.

In der virtuellen Realität ist der Spielraum noch kleiner. Auf der Vision Pro muss das Bild deinem Kopf folgen, beide Augen brauchen ein eigenes Bild, und jedes Ruckeln geht direkt auf den Magen. Das verlangt das Allerbeste von einer Entwicklungs-Pipeline: jeden Frame messen, nie raten und den Rückweg offen halten. Jede Optimierung hat einen Schalter, der das ursprüngliche Verhalten wiederherstellt, Byte für Byte.

Adelpha in 3D

Outcast zeichnet pro Frame ein flaches Bild. Für stereoskopisches 3D haben die Agenten im Speicher des Spiels gesucht und gefunden, was Appeals Engine für jeden Pixel vorhält: seine Entfernung, direkt neben seiner Farbe. Damit baut die GPU für jedes Auge ein Bild: Jeder Pixel wandert je nach Tiefe nach links oder rechts, die Lücken werden gefüllt, und das HUD bleibt in Bildschirmtiefe. Das kostet etwa 1,2 ms pro Frame auf der GPU, und die Landschaften von 1999 haben plötzlich echte Tiefe.

Die erste native Leinwand auf der Apple Vision Pro
Die erste native Leinwand auf der Apple Vision Pro
Die Leinwand in meinem Zimmer, mit dem nativen Menü daneben
Die Leinwand in meinem Zimmer, mit dem nativen Menü daneben

Schau dir das Material unten an: Outcast auf der Apple Vision Pro, gespielt mit einem PlayStation-5-DualSense.

Auf der Vision Pro läuft das Spiel als native visionOS-App. Die Leinwand hängt in 3D in deinem Raum, und im immersiven Modus umgibt dich das Himmelspanorama des Spiels als Kuppel, die sich mit Cutter dreht. Unter den Monden von Adelpha zu stehen ist ziemlich intensiv, und ich liebe es.

Immersiver Modus: der Himmel von Adelpha rundherum, Monde inklusive
Immersiver Modus: der Himmel von Adelpha rundherum, Monde inklusive
Immersiver Modus auf einer tropischen Insel von Adelpha
Immersiver Modus auf einer tropischen Insel von Adelpha

Eine native Oberfläche

Stereo hat einen Haken: Das Spiel zeichnet seine Menüs und Gesprächstexte in dasselbe flache Bild, also werden sie in 3D über die Szene verstreut. Die einzige verlässliche Lösung war, der Oberfläche eine eigene Ebene zu geben. Die Laufzeit liest die Gespräche, den Rucksack, die Notizen, Waffen, Karte und Menüs der Engine, und die Apps zeichnen sie nativ: echte Buttons, die du antippst, anschaust oder mit dem Controller auswählst. Die Worte, die Auswahlmöglichkeiten und die Logik bleiben Appeals, mit demselben Ton und Tempo. Der Rucksack kennt alle 105 Gegenstandsarten, mit den eigenen Icons und Beschriftungen des Spiels.

Ein Gespräch, mit der nativen Textebene in Grün
Ein Gespräch, mit der nativen Textebene in Grün
Der Gesprächsring als echte Buttons
Der Gesprächsring als echte Buttons
Der Waffenbildschirm, nativ gezeichnet
Der Waffenbildschirm, nativ gezeichnet

Sogar die Buchstaben sind die des Spiels: die originale Bitmap-Schrift von 1999, in glatte Vektorumrisse nachgezeichnet, mit der Systemschrift für den kleinen Text.

Vier Wege, die Schrift von 1999 nachzuzeichnen: Der glatte Umriss hat gewonnen
Vier Wege, die Schrift von 1999 nachzuzeichnen: Der glatte Umriss hat gewonnen

Steuerung

Jedes Gerät spielt sich anders, also bekam jedes Gerät seine eigene Steuerung:

  • iPad: Das Trackpad der Magic Keyboard dreht die Kamera, die Tastatur bewegt Cutter. Nimmst du die Tastatur ab, erscheint innerhalb von Sekunden ein Touch-Overlay: ein Stick zum Bewegen, ein Look-Stick, der weiterdreht, wenn du ihn am Rand hältst, und Buttons für Aktion, Feuer, Springen und Zielen.
  • iPhone: Touch, im Querformat, mit der nativen Oberfläche, abgestimmt auf einen kleinen Bildschirm.
  • Vision Pro: der PlayStation-5-DualSense, mit PlayStation-Symbolen auf den Buttons und dem Touchpad-Klick für die Karte.
  • Linux: Tastatur und Maus, wie 1999.
Der PlayStation-5-DualSense, der Controller für die Vision Pro
Der PlayStation-5-DualSense, der Controller für die Vision Pro

Ein Spielstand, jedes Gerät

Ich will auf dem Laptop aufhören und auf dem iPad oder im Headset weiterspielen, ohne nachzudenken. Also haben die Agenten einen Save-Syncer gebaut: einen kleinen Dienst unter game.willem.com, der den neuesten Spielstand behält. Drückst du den Gaamsaav, wird der Slot mitgeschickt und mit einem SHA-256-Hash geprüft; beim Start holt das Spiel einen neueren Spielstand von einem anderen Gerät und macht genau da weiter, wo du aufgehört hast, so wie der „Weiter“-Button des GOG-Launchers. Der neueste Spielstand gewinnt immer, und der Verlauf bleibt erhalten. Das funktioniert, weil die Spielstanddateien auf jedem Gerät Byte für Byte gleich sind: Die Engine ist überall dieselbe.

Weitermachen, wo du aufgehört hast: derselbe Spielstand auf dem iPad
Weitermachen, wo du aufgehört hast: derselbe Spielstand auf dem iPad

Eine Codebasis, vier Plattformen

Die C-Laufzeit wird geteilt: Linux auf dem Hauptzweig, Apple auf einem eigenen Zweig, der der Hauptlinie folgt. iPad und iPhone teilen sich eine App; die Vision Pro hat eine eigene native App in Swift und RealityKit um dieselbe Engine. Der Name Outcast 99 ist eine Verbeugung vor meinen eigenen Spielen Snake '97 und Block 89.

| Gerät | Gespielt mit | Tempo | |---|---|---| | Framework 12, Linux | Tastatur und Maus | Etwa 76 fps (Wine: 21) | | iPad Pro M4 | Trackpad, Tastatur oder Touch | Rund 90 fps | | iPhone | Touch | Flüssig, im Querformat | | Apple Vision Pro | DualSense | Stereoskopisches 3D, immersiver Himmel |

Fazit

Dieses Projekt ist ein Liebesbrief an ein Spiel, das sich 27 Jahre später noch immer wie Magie anfühlt. Alles, was es besonders macht, war 1999 schon da: die Welt, die Agenten, die Musik, die Geschichte. Ich habe es nur auf neues Glas getragen. Danke, Yann Robert, Franck Sauer, Yves Grolet und alle bei Appeal, dass ihr Outcast gemacht habt. Wenn du Adelpha noch nie besucht hast, ist jetzt ein guter Zeitpunkt: Kauf das Spiel, dreh die Musik auf und sag den Talan schöne Grüße von mir. Ulukai, IN 3D!

[action1]

Maschinenformate dieser Seite