Outcast 99
Un proyecto de afición en la frontera de lo posible
- Publicado
- Actualizado
- (creado )
- Escrito por
- Willem L. Middelkoop
- Temas
- AI · juego · programación · retro
- Versión humana de este artículo
- https://willem.com/es/2026-10-12_outcast-99/
- English
- Outcast 99
- Nederlands
- Outcast 99
- Deutsch
- Outcast 99
- Français
- Outcast 99
- Italiano
- Outcast 99
- Português
- Outcast 99
- Papiamentu
- Outcast 99
- Frysk
- Outcast 99
- Idiomas
- Traducido del original en inglés por un modelo de lenguaje en dos pasadas (traducción y corrección) con un glosario y un corrector ortográfico; aún no revisado por un hablante nativo.
Resumen
Outcast (1999) es una obra de arte y uno de mis juegos favoritos de siempre: Cutter Slade, el planeta Adelpha, sus paisajes de vóxeles y su banda sonora orquestal. En tres días, con un equipo de agentes de IA, lo llevé de forma nativa a mi portátil con Linux, al iPad, al iPhone y al Apple Vision Pro, en 3D estereoscópico. Un proyecto de afición, nada a la venta, escrito con profundo respeto por quienes lo hicieron y por todos los que todavía sueñan con Adelpha.
Texto completo
Una obra de arte adelantada a su tiempo
Outcast lo hizo Appeal en Bélgica y salió en 1999. Iba años por delante de su época. Un mundo abierto, libre y vivo, dos años antes de Grand Theft Auto III. Un motor de paisajes que dibujaba colinas ondulantes, agua con reflejos, profundidad de campo y bump mapping enteramente por software, en un Pentium III. Una banda sonora de Lennie Moore, interpretada por la Orquesta Sinfónica de Moscú y su coro, en una época en que la música orquestal en los juegos era rara. GameSpot lo nombró aventura del año.
Y luego está la IA. Appeal construyó para ello su propio motor, llamado GAIA: Game Artificial Intelligence with Agents. Cada habitante de Adelpha era un conjunto de agentes autónomos con habilidades como la vista, el oído y la acrobacia, que cooperaban e incluso competían para cumplir una tarea. Los soldados tocan sus cuernos, intentan flanquearte y te buscan cuando desapareces. Los Talan recuerdan cómo los trataste, y te ayudan o te dan la espalda. Hasta guardar la partida forma parte del mundo: aprietas tu Gaamsaav, se ilumina y suena, y los guardias vienen a mirar. ¡En 1999!
Lo compré en su día, más de una vez. Años después, los fundadores originales, Yann Robert, Franck Sauer e Yves Grolet, recuperaron los derechos y reconstruyeron el juego a partir de su código fuente original como Outcast 1.1, con resoluciones más altas y renderizado en varios hilos. Esa es la versión que volví a comprar en GOG y de la que parte este proyecto. Si nunca lo has jugado: compra Outcast 1.1 en GOG. Y si quieres ver adónde fue Adelpha después, está Outcast: A New Beginning, hecho por el mismo estudio en 2024.

Quiero dejarlo claro desde el principio: este es un proyecto personal de afición, un homenaje. La adaptación no se ha publicado y no se publicará sin la aprobación oficial de sus creadores. Ningún código, ningún dato del juego y ningún análisis sale de mi casa. Siempre necesitas tu propia copia del juego.
Cutter, mi viejo amigo
Empezó un domingo por la mañana en mi Framework 12 con Omarchy Linux. Outcast 1.1 funcionaba con Wine, una capa de compatibilidad para programas de Windows, a unos 21 fotogramas por segundo. Hacía tiempo que no veía a mi amigo Cutter Slade. Entonces llegó la pregunta: ¿hasta dónde podemos llegar?

Más lejos de lo que pensaba. En lugar de emular el juego, los agentes convirtieron el ejecutable de Windows en código C portable: una recompilación estática. Cada una de sus 66 968 funciones se convirtió en C, unos 48 MB en total. Alrededor hay un runtime escrito a mano que hace el papel de Windows: memoria, archivos, hilos, DirectInput, DirectSound, la ventana gráfica. ¡SIN WINE, SIN EMULADOR!

Cómo funciona el lifting
El lifter lee cada instrucción x86 y escribe el C que hace exactamente lo mismo. Suena sencillo hasta que te topas con un motor tan ingenioso como el de Appeal. Usa instrucciones MMX y SSE para sus paisajes, coma flotante x87 con sus propios modos de redondeo (la primera compilación nativa tenía fallos de color hasta que se modelaron), y 62 sitios donde el código se reescribe a sí mismo mientras se ejecuta, un truco clásico de una época en la que cada ciclo contaba. Todo eso necesitó extensiones propias sobre el lifter de código abierto del que partimos. Para estar seguros de que el C hace lo que hacía el procesador, cada forma de instrucción que usa el juego se probó contra un emulador de CPU, en Intel y en ARM.
La música resultó ser una única grabación de 68 minutos que el motor reproduce por rangos de tiempo, con sus propios fundidos. Así que el runtime recibió un pequeño sustituto de la capa multimedia de Windows que reproduce esos rangos en el mezclador de sonido. La primera vez que volvió la banda sonora de Lennie Moore en la compilación nativa, fue bastante épico.
La velocidad vino de medir, paso a paso. Dos puntos críticos del hilo principal del juego recibieron un sustituto nativo: el descompresor de los paquetes de datos del juego y la rutina que pinta el cielo (de 2,15 ms a 0,37 ms por fotograma, comprobado byte a byte contra el original en 1200 fotogramas). MMX pasó a ser código vectorial de verdad. Y Outcast 1.1 ya reparte su renderizado en varios hilos, una de las grandes razones por las que vuela en los chips modernos. En el Framework 12, el juego pasó de 21 fotogramas por segundo con Wine a unos 76 de forma nativa. En el iPad Pro funciona a unos 90.
Un equipo de agentes
Nada de esto está escrito a mano. Tres sesiones de Claude Code trabajaron juntas como un pequeño estudio: una en el portátil con Linux para el recompilador y el runtime, otra en el MacBook para Xcode y las compilaciones del iPad, el iPhone y el Vision Pro, y otra en la máquina de mi homelab que coordinaba a las dos, pasándose notas día y noche. Yo jugaba, probaba y decidía. Es la misma configuración multiagente que impulsa los procesos de desarrollo nativo que construí para apps como Contact, y Outcast la exigió más que nada hasta ahora. Hay una simetría bonita en ello: un juego cuyos personajes eran manejados por agentes en 1999, llevado a nuevos dispositivos por agentes en 2026.

Eso también significa tokens. Tras siete horas de iteración sin parar eran 180 millones, al final del primer día 278 millones, y el tercer día más de 1400 millones. Menudo proyecto de afición pequeño. Pero aprendí un montón sobre motores de juegos, interacción y la reinterpretación de una obra de arte.
La velocidad es el concepto
Un juego en el que te mueves por un mundo es un tipo especial de software. En una página web, unos pocos milisegundos de retraso pasan desapercibidos. En un juego notas cada uno: los controles se vuelven blandos, la cámara se retrasa, la magia desaparece. Lo aprendí con Thinc Ahead 3D y Protect Your Eggs.
En realidad virtual el margen es aún más pequeño. En el Vision Pro la imagen tiene que seguir tu cabeza, cada ojo necesita su propia imagen, y cualquier tirón va directo al estómago. Eso exige lo mejor de un proceso de desarrollo: medir cada fotograma, no adivinar nunca y dejar siempre abierto el camino de vuelta. Cada optimización tiene un interruptor que restaura el comportamiento original, byte a byte.
Adelpha en 3D
Outcast dibuja una imagen plana por fotograma. Para conseguir 3D estereoscópico, los agentes fueron a buscar en la memoria del juego y encontraron lo que el motor de Appeal guarda para cada píxel: su distancia, justo al lado de su color. Con eso, la GPU construye una imagen para cada ojo: cada píxel se mueve a izquierda o derecha según su profundidad, se rellenan los huecos y el HUD se queda a la profundidad de la pantalla. Cuesta unos 1,2 ms por fotograma en la GPU, y de repente los paisajes de 1999 tienen profundidad real.


Mira el vídeo de abajo: Outcast en el Apple Vision Pro, jugado con un DualSense de PlayStation 5.
En el Vision Pro el juego funciona como una app nativa de visionOS. El lienzo cuelga en 3D en tu habitación, y en el modo inmersivo el propio panorama del cielo del juego te rodea como una cúpula que gira junto con Cutter. Estar de pie bajo las lunas de Adelpha es bastante intenso, y me encanta.


Una interfaz nativa
El estéreo tiene una trampa: el juego dibuja sus menús y sus textos de conversación en la misma imagen plana, así que en 3D acaban esparcidos por la escena. La única solución fiable fue darle a la interfaz su propia capa. El runtime lee las conversaciones, la mochila, las notas, las armas, el mapa y los menús del propio motor, y las apps los dibujan de forma nativa: botones de verdad que tocas, miras o seleccionas con el mando. Las palabras, las opciones y la lógica siguen siendo de Appeal, con el mismo tono y ritmo. La mochila conoce los 105 tipos de objeto, con los iconos y las descripciones del propio juego.



Hasta las letras son las del propio juego: la fuente de mapa de bits original de 1999, trazada en contornos vectoriales suaves, con la fuente del sistema para el texto pequeño.

Controles
Cada dispositivo se juega de forma distinta, así que cada uno recibió sus propios controles:
- iPad: el trackpad del Magic Keyboard gira la cámara, el teclado mueve a Cutter. Separa el teclado y en cuestión de segundos aparece una superposición táctil: un stick para moverse, un stick de mirada que sigue girando cuando lo mantienes en el borde, y botones para acción, disparo, salto y apuntar.
- iPhone: táctil, en horizontal, con la interfaz nativa ajustada a una pantalla pequeña.
- Vision Pro: el DualSense de PlayStation 5, con glifos de PlayStation en los botones y el clic del panel táctil para el mapa.
- Linux: teclado y ratón, como en 1999.

Una partida, todos los dispositivos
Quiero dejar de jugar en el portátil y seguir en el iPad, o en las gafas, sin pensarlo. Así que los agentes construyeron un sincronizador de partidas: un pequeño servicio en game.willem.com que guarda la partida más reciente. Aprietas el Gaamsaav y el espacio se envía, comprobado con un hash SHA-256; al arrancar, el juego recoge una partida más reciente de otro dispositivo y continúa justo donde lo dejaste, como hace el botón «Continuar» del lanzador de GOG. La partida más reciente siempre gana y se conserva el historial. Funciona porque los archivos de guardado son idénticos byte a byte en todos los dispositivos: el motor es el mismo en todas partes.

Una base de código, cuatro plataformas
El runtime en C es compartido: Linux en la rama principal, Apple en su propia rama que sigue a la principal. El iPad y el iPhone comparten una app; el Vision Pro tiene su propia app nativa en Swift y RealityKit alrededor del mismo motor. El nombre Outcast 99 es un guiño a mis propios juegos Snake '97 y Block 89.
| Dispositivo | Se juega con | Velocidad | |---|---|---| | Framework 12, Linux | Teclado y ratón | Unos 76 fps (Wine: 21) | | iPad Pro M4 | Trackpad, teclado o táctil | Unos 90 fps | | iPhone | Táctil | Fluido, en horizontal | | Apple Vision Pro | DualSense | 3D estereoscópico, cielo inmersivo |
Conclusión
Este proyecto es una carta de amor a un juego que sigue sintiéndose como magia, 27 años después. Todo lo que lo hace especial estaba ahí en 1999: el mundo, los agentes, la música, la historia. Yo solo lo llevé a pantallas nuevas. Gracias, Yann Robert, Franck Sauer, Yves Grolet y todos en Appeal por hacer Outcast. Si nunca has visitado Adelpha, ahora es buen momento: compra el juego, sube la música y saluda a los Talan de mi parte. ¡Ulukai, EN 3D!
[action1]