Outcast 99

Escrita · 12 out 2026

Outcast 99

Um projeto de lazer na fronteira do possível

Outcast (1999) é uma obra de arte e um dos meus jogos preferidos de sempre: Cutter Slade, o planeta Adelpha, as suas paisagens de voxels e a sua banda sonora orquestral. Em três dias, com uma equipa de agentes de IA, trouxe-o nativamente para o meu portátil Linux, iPad, iPhone e Apple Vision Pro, em 3D estereoscópico. Um projeto de lazer, nada à venda, escrito com profundo respeito pelas pessoas que o fizeram e por todos os que ainda sonham com Adelpha.

Uma obra de arte, à frente do seu tempo

O Outcast foi feito pela Appeal, na Bélgica, e lançado em 1999. Estava anos à frente do seu tempo. Um mundo aberto livre e vivo, dois anos antes de Grand Theft Auto III. Um motor de paisagens que desenhava colinas ondulantes, água refletora, profundidade de campo e bump mapping inteiramente em software, num Pentium III. Uma banda sonora de Lennie Moore, interpretada pela Orquestra Sinfónica de Moscovo e pelo seu coro, numa altura em que a música orquestral em jogos era rara. A GameSpot elegeu-o o jogo de aventura do ano.

E depois há a IA. A Appeal construiu um motor próprio para ela, chamado GAIA: Game Artificial Intelligence with Agents. Cada habitante de Adelpha era um conjunto de agentes autónomos com capacidades como visão, audição e acrobacia, a cooperar e até a competir para cumprir uma tarefa. Os soldados tocam as suas trombetas, tentam apanhar-te pelo flanco e procuram-te quando desapareces. Os Talan lembram-se de como os trataste e ajudam-te ou viram-te as costas. Até guardar o jogo faz parte do mundo: apertas o teu Gaamsaav, ele brilha e faz um som, e os guardas vêm ver. Em 1999!

Comprei-o na altura, mais do que uma vez. Anos depois, os fundadores originais, Yann Robert, Franck Sauer e Yves Grolet, recompraram os direitos e reconstruíram o jogo a partir do código-fonte original como Outcast 1.1, com resoluções mais altas e renderização em vários threads. Essa é a versão que voltei a comprar na GOG, e aquela de onde este projeto parte. Se nunca jogaste: compra o Outcast 1.1 na GOG. E se queres ver para onde Adelpha foi a seguir, há o Outcast: A New Beginning, feito pelo mesmo estúdio em 2024.

Outcast 1.1 na minha coleção da GOG. Compra a tua própria cópia!
Outcast 1.1 na minha coleção da GOG. Compra a tua própria cópia!

Deixo isto claro desde o início: este é um projeto de lazer pessoal, uma homenagem. A adaptação não foi lançada e não o será sem a aprovação oficial dos seus criadores. Nenhum código, nenhum dado do jogo e nenhuma análise sai da minha casa. Precisas sempre da tua própria cópia do jogo.

Cutter, meu velho amigo

Começou numa manhã de domingo no meu Framework 12 com Omarchy Linux. O Outcast 1.1 corria com o Wine, uma camada de compatibilidade para programas Windows, a cerca de 21 fotogramas por segundo. Já fazia algum tempo que não via o meu amigo Cutter Slade. Então veio a pergunta: até onde podemos ir?

Cutter Slade no meu Framework 12, na primeira manhã
Cutter Slade no meu Framework 12, na primeira manhã

Mais longe do que pensava. Em vez de emular o jogo, os agentes transformaram o executável do Windows em código C portátil: uma recompilação estática. Cada uma das suas 66 968 funções passou a C, cerca de 48 MB. À volta disso está um runtime escrito à mão que faz o papel do Windows: memória, ficheiros, threads, DirectInput, DirectSound, a janela gráfica. SEM WINE, SEM EMULADOR!

A falar com Zokrym, a correr nativamente em Linux: sem Wine, sem emulador
A falar com Zokrym, a correr nativamente em Linux: sem Wine, sem emulador

Como funciona o lifter

O lifter lê cada instrução x86 e escreve o C que faz exatamente o mesmo. Parece simples até encontrares um motor tão engenhoso como o da Appeal. Usa instruções MMX e SSE para as paisagens, vírgula flutuante x87 com os seus próprios modos de arredondamento (a primeira versão nativa tinha falhas de cor até estes serem modelados) e 62 sítios onde o código se reescreve a si próprio enquanto corre, um truque clássico de uma época em que cada ciclo contava. Tudo isso precisou de extensões próprias sobre o lifter de código aberto de que partimos. Para termos a certeza de que o C faz o que o processador fazia, cada forma de instrução que o jogo usa foi testada contra um emulador de CPU, em Intel e em ARM.

A música revelou-se uma única gravação de 68 minutos que o motor toca por intervalos de tempo, com os seus próprios fades. Por isso o runtime ganhou um pequeno substituto da camada multimédia do Windows que toca esses intervalos no misturador de som. Na primeira vez que a banda sonora de Lennie Moore regressou na versão nativa, foi de certa forma épico.

A velocidade veio de medir, a cada passo. Dois pontos quentes no thread principal do jogo ganharam um substituto nativo: o descompressor dos pacotes de dados do jogo e a rotina que pinta o céu (de 2,15 ms para 0,37 ms por fotograma, verificado byte a byte contra o original ao longo de 1200 fotogramas). O MMX passou a ser código vetorial a sério. E o Outcast 1.1 já reparte a renderização por vários threads, uma grande razão pela qual voa em chips modernos. No Framework 12, o jogo passou de 21 fotogramas por segundo com o Wine para cerca de 76 nativamente. No iPad Pro corre a cerca de 90.

Uma equipa de agentes

Nada disto foi escrito à mão. Três sessões do Claude Code trabalharam juntas como um pequeno estúdio: uma no portátil Linux para o recompilador e o runtime, outra no MacBook para o Xcode e as versões para iPad, iPhone e Vision Pro, e outra na máquina do meu homelab a coordenar as duas, a passar notas de dia e de noite. Eu joguei, testei e decidi. É a mesma configuração multiagente que move as pipelines de desenvolvimento nativo que construí para apps como o Contact, e o Outcast levou-a mais longe do que qualquer outro projeto antes. Há uma bela simetria nisto: um jogo cujas personagens eram movidas por agentes em 1999, levado para novos dispositivos por agentes em 2026.

Primeiro dia: cair da cadeira umas quantas vezes
Primeiro dia: cair da cadeira umas quantas vezes

Isso significa também tokens. Depois de sete horas de iteração sem parar eram 180 milhões, no fim do primeiro dia 278 milhões, e ao terceiro dia mais de 1,4 mil milhões. Isto para um pequeno projeto de lazer. Mas aprendi imenso sobre motores de jogos, interação e a reinterpretação de uma obra de arte.

A velocidade é o conceito

Um jogo em que te moves por um mundo é um tipo especial de software. Numa página web, uns milissegundos de atraso passam despercebidos. Num jogo, sentes cada um: os controlos ficam moles, a câmara atrasa-se, a magia perde-se. Aprendi isso com o Thinc Ahead 3D e o Protect Your Eggs.

Na realidade virtual a margem é ainda mais pequena. No Vision Pro a imagem tem de seguir a tua cabeça, cada olho precisa da sua própria imagem, e qualquer soluço vai direto ao estômago. Isso exige o melhor de uma pipeline de desenvolvimento: medir cada fotograma, nunca adivinhar e manter o caminho de volta aberto. Cada otimização tem um interruptor que repõe o comportamento original, byte a byte.

Adelpha em 3D

O Outcast desenha uma imagem plana por fotograma. Para obter 3D estereoscópico, os agentes foram à procura na memória do jogo e encontraram o que o motor da Appeal guarda para cada pixel: a sua distância, mesmo ao lado da sua cor. Com isso, a GPU constrói uma imagem para cada olho: cada pixel desloca-se para a esquerda ou para a direita conforme a sua profundidade, os buracos são preenchidos e o HUD fica à profundidade do ecrã. Custa cerca de 1,2 ms por fotograma na GPU, e as paisagens de 1999 ganham de repente profundidade real.

A primeira tela nativa no Apple Vision Pro
A primeira tela nativa no Apple Vision Pro
A tela no meu quarto, com o menu nativo ao lado
A tela no meu quarto, com o menu nativo ao lado

Vê o vídeo abaixo: Outcast no Apple Vision Pro, jogado com um DualSense da PlayStation 5.

No Vision Pro, o jogo corre como uma app nativa de visionOS. A tela pende no teu quarto em 3D e, no modo imersivo, o panorama do céu do próprio jogo rodeia-te como uma cúpula que gira com o Cutter. Estar debaixo das luas de Adelpha é bastante intenso, e adoro.

Modo imersivo: o céu de Adelpha por todo o lado, luas incluídas
Modo imersivo: o céu de Adelpha por todo o lado, luas incluídas
Modo imersivo numa ilha tropical de Adelpha
Modo imersivo numa ilha tropical de Adelpha

Uma interface nativa

O estéreo tem um senão: o jogo desenha os menus e os textos das conversas na mesma imagem plana, por isso em 3D ficam espalhados pela cena. A única solução fiável foi dar à interface a sua própria camada. O runtime lê as conversas, a mochila, as notas, as armas, o mapa e os menus do próprio motor, e as apps desenham-nos nativamente: botões verdadeiros em que tocas, que olhas ou que selecionas com o comando. As palavras, as escolhas e a lógica continuam a ser da Appeal, com o mesmo tom e ritmo. A mochila conhece os 105 tipos de objetos, com os ícones e legendas do próprio jogo.

Uma conversa, com a camada de texto nativa a verde
Uma conversa, com a camada de texto nativa a verde
O anel de conversa como botões verdadeiros
O anel de conversa como botões verdadeiros
O ecrã das armas, desenhado nativamente
O ecrã das armas, desenhado nativamente

Até as letras são as do próprio jogo: o tipo de letra bitmap original de 1999 traçado em contornos vetoriais suaves, com o tipo de letra do sistema para o texto pequeno.

Quatro maneiras de traçar o tipo de letra de 1999: o contorno suave ganhou
Quatro maneiras de traçar o tipo de letra de 1999: o contorno suave ganhou

Controlos

Cada dispositivo joga de maneira diferente, por isso cada um ganhou os seus próprios controlos:

  • iPad: o trackpad do Magic Keyboard roda a câmara, o teclado move o Cutter. Destaca o teclado e aparece em segundos uma sobreposição tátil: um manípulo para andar, um manípulo de olhar que continua a rodar quando o seguras na borda, e botões para ação, disparo, salto e pontaria.
  • iPhone: toque, em paisagem, com a interface nativa ajustada a um ecrã pequeno.
  • Vision Pro: o DualSense da PlayStation 5, com glifos da PlayStation nos botões e o clique do touchpad para o mapa.
  • Linux: teclado e rato, como em 1999.
O DualSense da PlayStation 5, o comando para o Vision Pro
O DualSense da PlayStation 5, o comando para o Vision Pro

Um save, todos os dispositivos

Quero parar de jogar no portátil e continuar no iPad, ou no headset, sem pensar nisso. Por isso os agentes construíram um sincronizador de saves: um pequeno serviço em game.willem.com que guarda o save mais recente. Aperta o Gaamsaav e a ranhura é enviada, verificada com um hash SHA-256; ao arrancar, o jogo vai buscar um save mais recente de outro dispositivo e continua exatamente onde ficaste, como faz o botão "Continue" do launcher da GOG. O save mais recente ganha sempre e o histórico é mantido. Funciona porque os ficheiros de save são byte a byte iguais em todos os dispositivos: o motor é o mesmo em todo o lado.

Continua onde ficaste: o mesmo save no iPad
Continua onde ficaste: o mesmo save no iPad

Uma base de código, quatro plataformas

O runtime em C é partilhado: Linux no ramo principal, Apple no seu próprio ramo que acompanha a linha principal. O iPad e o iPhone partilham uma app; o Vision Pro tem a sua própria app nativa em Swift e RealityKit em torno do mesmo motor. O nome Outcast 99 é uma vénia aos meus próprios jogos Snake '97 e Block 89.

Dispositivo Joga-se com Velocidade
Framework 12, Linux Teclado e rato Cerca de 76 fps (Wine: 21)
iPad Pro M4 Trackpad, teclado ou toque Cerca de 90 fps
iPhone Toque Fluido, em paisagem
Apple Vision Pro DualSense 3D estereoscópico, céu imersivo

Conclusão

Este projeto é uma carta de amor a um jogo que ainda parece magia, 27 anos depois. Tudo o que o torna especial estava lá em 1999: o mundo, os agentes, a música, a história. Tudo o que fiz foi levá-lo para um vidro novo. Obrigado Yann Robert, Franck Sauer, Yves Grolet e todos na Appeal por terem feito o Outcast. Se nunca visitaste Adelpha, agora é uma boa altura: compra o jogo, aumenta a música e cumprimenta os Talan por mim. Ulukai, EM 3D!

OUTCAST 1.1 NA GOG.COM

← Mais textos