Outcast 99
In hobbyprojekt oan de râne fan wat mooglik is
- Publisearre
- Bywurke
- (oanmakke )
- Skreaun troch
- Willem L. Middelkoop
- Ûnderwerpen
- AI · spultsje · programmearjen · retro
- Minsklike ferzje fan dit berjocht
- https://willem.com/fy/2026-10-12_outcast-99/
- English
- Outcast 99
- Nederlands
- Outcast 99
- Deutsch
- Outcast 99
- Español
- Outcast 99
- Français
- Outcast 99
- Italiano
- Outcast 99
- Português
- Outcast 99
- Papiamentu
- Outcast 99
- Talen
- Oerset út it Ingelske oarspronklike troch in taalmodel yn twa rûnten (oersetting en korreksje) mei in wurdlist en in staveringskontrôle; noch net lêzen troch in memmetaalsprekker.
Gearfetting
Outcast (1999) is in keunstwurk, en ien fan myn alderleafste spultsjes ea: Cutter Slade, de planeet Adelpha, de voxel-lânskippen en de orkestrale soundtrack. Yn trije dagen, mei in team fan AI-aginten, brocht ik it native nei myn Linux-laptop, iPad, iPhone en Apple Vision Pro, yn stereoskopysk 3D. In hobbyprojekt, neat te keap, skreaun mei djip respekt foar de minsken dy't it makke hawwe, en foar elkenien dy't noch altyd dreamt fan Adelpha.
Folsleine tekst
In keunstwurk, syn tiid foarút
Outcast waard makke troch Appeal yn Belgje en útbrocht yn 1999. It wie jierren foarút op syn tiid. In frije, libbene iepen wrâld, twa jier foar Grand Theft Auto III. In lânskipsmotor dy't heuvelend lân, reflektearjend wetter, skerptediepte en bump mapping folslein yn software tekene, op in Pentium III. In soundtrack fan Lennie Moore, útfierd troch it Symfony Orkest fan Moskou en koar, yn in tiid dat orkestrale spultsjemuzyk seldsum wie. GameSpot neamde it it aventoerespultsje fan it jier.
En dan is der de AI. Appeal boude dêr in eigen motor foar, GAIA neamd: Game Artificial Intelligence with Agents. Elke ynwenner fan Adelpha wie in set autonome aginten mei feardichheden as sicht, harksin en akrobatyk, dy't gearwurken en sels konkurrearren om in taak klear te krijen. Soldaten blaze op harren hoarn, besykje dy yn de flank te nimmen en sykje nei dy as do ferdwynst. De Talan ûnthâlde hoe't do se behannele hast, en helpe dy of keare dy de rêch ta. Sels it bewarjen fan it spultsje is part fan de wrâld: do kniipst yn dyn Gaamsaav, hy glimt en makket in lûd, en de wachten komme sjen. Yn 1999!
Ik kocht it destiids, mear as ien kear. Jierren letter kochten de oarspronklike oprjochters, Yann Robert, Franck Sauer en Yves Grolet, de rjochten werom en boude it spultsje út de oarspronklike boarnekoade opnij op as Outcast 1.1, mei hegere resolúsjes en rendering op meardere threads. Dat is de ferzje dy't ik op GOG opnij kocht, en dêr't dit projekt fan útgiet. As do it nea spile hast: keapje Outcast 1.1 op GOG. En as do sjen wolst wêr't Adelpha hinne gie, is der Outcast: A New Beginning, makke troch deselde studio yn 2024.

Lit ik fan it begjin ôf dúdlik wêze: dit is in persoanlik hobbyprojekt, in earbetoan. De port is net útbrocht en sil dat ek net wurde sûnder de offisjele goedkarring fan de makkers. Gjin koade, gjin spultsjegegevens en gjin analyze ferlit myn hûs. Do hast altyd dyn eigen kopy fan it spultsje nedich.
Cutter, myn âlde freon
It begûn op in snein moarn op myn Framework 12 mei Omarchy Linux. Outcast 1.1 rûn ûnder Wine, in kompatibiliteitslaach foar Windows-programma's, op sa'n 21 frames per sekonde. It wie in skoftke lyn dat ik myn freon Cutter Slade sjoen hie. Doe kaam de fraach: hoe fier kinne wy gean?

Fierder as ik tocht. Yn stee fan it spultsje te emulearjen, makken de aginten fan it Windows-programma portabele C-koade: in statyske werkompilaasje. Elk fan de 66.968 funksjes waard C, sa'n 48 MB. Dêrom hinne sit in mei de hân skreaune runtime dy't de rol fan Windows spilet: ûnthâld, bestannen, threads, DirectInput, DirectSound, it grafyske finster. GJIN WINE, GJIN EMULATOR!

Hoe it liften wurket
De lifter lêst elke x86-ynstruksje en skriuwt de C dy't krekt itselde docht. Dat klinkt ienfâldich oant do in motor tsjinkomst dy't sa tûk is as dy fan Appeal. Dy brûkt MMX- en SSE-ynstruksjes foar syn lânskippen, x87-driuwende komma mei eigen ôfrûningswizen (de earste native build hie kleurglitches oant dy modellearre waarden), en 62 plakken dêr't de koade himsels oanpast wylst er draait, in klassike trúk út in tiid dat elke syklus telde. Al dy dingen hiene eigen útwreidingen nedich boppe op de open source lifter dêr't wy mei begûnen. Om wis te wêzen dat de C docht wat de prosessor die, is elke ynstruksjefoarm dy't it spultsje brûkt, test tsjin in CPU-emulator, op Intel en op ARM.
De muzyk blykte ien opname fan 68 minuten te wêzen dy't de motor yn tiidbereiken ôfspilet, mei eigen fades. Dus de runtime krige in lyts ferfanger foar de Windows-medialaach dy't dy bereiken ôfspilet yn de lûdsmixer. De earste kear dat de soundtrack fan Lennie Moore werom kaam yn de native build, wie it aardich epysk.
Fluchheid kaam út mjitten, elke stap. Twa hotspots op de haadthread fan it spultsje krigen in native ferfanger: de dekompressor foar de gegevenspakketten fan it spultsje en de routine dy't de loft skildert (2,15 ms del nei 0,37 ms per frame, byte foar byte kontrolearre tsjin it orizjineel oer 1.200 frames). MMX waard echte fektorkoade. En Outcast 1.1 ferdielt syn rendering al oer meardere threads, in grutte reden wêrom't it fleant op moderne chips. Op de Framework 12 gie it spultsje fan 21 frames per sekonde ûnder Wine nei sa'n 76 native. Op de iPad Pro spilet it op sa'n 90.
In team fan aginten
Neat hjirfan is mei de hân typt. Trije Claude Code-sesjes wurken gear as in lytse studio: ien op de Linux-laptop foar de werkompiler en de runtime, ien op de MacBook foar Xcode en de builds foar iPad, iPhone en Vision Pro, en ien op de masine yn myn homelab dy't de oare twa koördinearre en dei en nacht notysjes trochstjoerde. Ik spile, testte en besleat. It is deselde multi-agint-opset dy't de native ûntwikkelpipelines oanstjoert dy't ik boude foar apps lykas Contact, en Outcast joech it hurder te dwaan as alles foarhinne. Der sit in moaie symmetry yn: in spultsje wêrfan't de personaazjes yn 1999 troch aginten oanstjoerd waarden, nei nije apparaten brocht troch aginten yn 2026.

Dat betsjut ek tokens. Nei sân oeren non-stop iterearjen wie it 180 miljoen, oan it ein fan dei ien 278 miljoen, en op dei trije mear as 1,4 miljard. Safolle foar in lyts hobbyprojekt. Mar ik learde in hiel soad oer spultsjemotoren, ynteraksje en de werynterpretaasje fan in keunstwurk.
Fluchheid is it konsept
In spultsje dêr't do troch in wrâld hinne bewegest is in bysûnder soarte software. Yn in webside giet in pear millisekonden fertraging net op. Yn in spultsje fielst do elk fan harren: de besturing wurdt sompich, de kamera bliuwt efter, de magy is fuort. Dat learde ik mei Thinc Ahead 3D en Protect Your Eggs.
Yn firtuele realiteit is de marzje noch lytser. Op de Vision Pro moat it byld dyn holle folgje, beide eagen hawwe in eigen ôfbylding nedich, en elke stotter giet rjocht nei dyn mage. Dat easket it alderbêste fan in ûntwikkelpipeline: elk frame mjitte, nea riede, en de wei werom iepenhâlde. Elke optimalisaasje hat in skeakel dy't it orizjinele gedrach werombringt, byte foar byte.
Adelpha yn 3D
Outcast tekent ien plat byld per frame. Om stereoskopysk 3D te krijen gongen de aginten yn it ûnthâld fan it spultsje sykjen en fûnen wat de motor fan Appeal foar elke piksel bewarret: syn ôfstân, rjocht njonken syn kleur. Dêrmei bout de GPU in byld foar elk each: elke piksel skoot nei links of rjochts nei syn djipte, de gatten wurde fol, en de HUD bliuwt op skermdjipte. It kostet sa'n 1,2 ms per frame op de GPU, en de lânskippen út 1999 hawwe ynienen echte djipte.


Sjoch de opname hjirûnder: Outcast op Apple Vision Pro, spile mei in PlayStation 5 DualSense.
Op de Vision Pro rint it spultsje as in native visionOS-app. It doek hinget yn dyn keamer yn 3D, en yn de ymmersive modus omjout de eigen loftpanorama fan it spultsje dy as in koepel dy't mei Cutter mei draait. Under de moannen fan Adelpha stean is frij yntins, en ik hâld derfan.


In native ynterface
Stereo hat in knelpunt: it spultsje tekent syn menu's en petearteksten yn itselde platte byld, dus yn 3D wurde se oer it toaniel ferspraat. De iennige betrouber oplossing wie om de ynterface in eigen laach te jaan. De runtime lêst de eigen petearen, rêchsek, notysjes, wapens, kaart en menu's fan de motor, en de apps tekenje se native: echte knoppen dêr't do op tikje, nei sjen of mei de controller kieze kinst. De wurden, de karren en de logika bliuwe fan Appeal, mei deselde toan en tempo. De rêchsek ken alle 105 itemsoarten, mei de eigen ikoanen en byskriften fan it spultsje.



Sels de letters binne fan it spultsje sels: it orizjinele bitmaplettertype fan 1999, oertekene yn gladde fektorkonturen, mei it systeemlettertype foar de lytse tekst.

Besturing
Elk apparaat spilet oars, dus elk apparaat krige eigen besturing:
- iPad: de trackpad fan it Magic Keyboard draait de kamera, it toetseboerd beweecht Cutter. Haal it toetseboerd ôf en binnen sekonden ferskynt in oanrekkingslaach: in stick om te bewegen, in kykstick dy't trochdraait as do him oan de râne fêsthâldst, en knoppen foar aksje, fjoer, sprong en mikke.
- iPhone: oanrekking, yn lânskip, mei de native ynterface ôfstimd op in lyts skerm.
- Vision Pro: de PlayStation 5 DualSense, mei PlayStation-symboalen op de knoppen en de touchpad-klik foar de kaart.
- Linux: toetseboerd en mûs, lykas yn 1999.

Ien bewarring, elk apparaat
Ik wol op de laptop ophâlde mei spyljen en trochgean op de iPad, of yn de headset, sûnder dêr oer nei te tinken. Dus bouden de aginten in save-syncer: in lytse tsjinst op game.willem.com dy't de nijste bewarring bewarret. Kniip yn de Gaamsaav en de bewarring giet mei, kontrolearre mei in SHA-256-hash; by it starten helet it spultsje in nijere bewarring fan in oar apparaat en giet troch krekt wêr't do bleaun wiest, sa't de "Continue"-knop fan de GOG-launcher docht. De nijste bewarring wint altyd en de skiednis bliuwt bewarre. It wurket om't de bewarringsbestannen op elk apparaat byte foar byte itselde binne: de motor is oeral deselde.

Ien koadebasis, fjouwer platfoarms
De C-runtime wurdt dield: Linux op de haadtûke, Apple op in eigen tûke dy't de haadlinie folget. De iPad en iPhone diele ien app; de Vision Pro hat in eigen native app yn Swift en RealityKit om deselde motor hinne. De namme Outcast 99 is in knik nei myn eigen spultsjes Snake '97 en Block 89.
| Apparaat | Spilet mei | Fluchheid | |---|---|---| | Framework 12, Linux | Toetseboerd en mûs | Sa'n 76 fps (Wine: 21) | | iPad Pro M4 | Trackpad, toetseboerd of oanrekking | Sa'n 90 fps | | iPhone | Oanrekking | Soepel, yn lânskip | | Apple Vision Pro | DualSense | Stereoskopysk 3D, ymmersive loft |
Konklúzje
Dit projekt is in leafdesbrief oan in spultsje dat noch altyd as magy fielt, 27 jier letter. Alles wat it bysûnder makket wie der yn 1999 al: de wrâld, de aginten, de muzyk, it ferhaal. Alles wat ik die, wie it nei nij glês dragen. Tank, Yann Robert, Franck Sauer, Yves Grolet en elkenien by Appeal foar it meitsjen fan Outcast. As do Adelpha noch nea besocht hast, is no in goede tiid: keapje it spultsje, draai de muzyk lûd, en groet de Talan fan my. Ulukai, IN 3D!
[action1]