Night Eagle II — de commandogame in isometrisch beeld

2026

Night Eagle in isometrische pixelart: de missie in de Morvan, juni 1944, met blokmodellen, een Dakota-sprong en dorpskerken. Phaser 3.90 en TypeScript.

Night Eagle II is dezelfde game als Night Eagle, maar je kijkt schuin van boven in plaats van recht van boven. Het is nacht in juni 1944, je bent een SAS-soldaat in de Morvan, en je moet langs 90 Duitse vijanden het radiocommandocentrum in de basis opblazen en ontsnappen naar het ophaalpunt. Missie, kaart, vijanden, voertuigen, partizanen, wapens, checkpoints en cheatmodus zijn gelijk; nieuw zijn het beeld, de opening, de muziek en de kerken.

De game begint in een C-47 Dakota met de zwart-witte invasiestrepen van juni 1944. Hij vliegt laag over wolken op verschillende hoogtes het dal in, het lampje bij de deur springt van rood naar groen en je springt aan bakboord naar buiten. Je houdt eerst nog de vaart van het vliegtuig, valt kort vrij, en de koepel ontvouwt zich van een smalle wimpel tot een volle parachute die licht slingert. De camera blijft bij je, zoomt uit over het hele dal en komt terug voor de landing; daarna valt de koepel naast je neer.

Een punt (x, y) in de wereld komt op het scherm op (x − y, (x + y) / 2). Een cel van 8 bij 8 pixels wordt zo een ruit van 16 bij 8, en het beeld van 640 bij 360 pixels toont evenveel grond als in Night Eagle, zodat zichtafstanden en spanning gelijk blijven. W loopt omhoog over het scherm; de muis richt op borsthoogte en wordt terug naar de grond gerekend.

Beide versies komen uit één broncode. De simulatie is gedeeld en importeert nooit Phaser; een test bewaakt dat. Een build met --mode iso kiest de isometrische tekenlaag. Licht, effecten, water, Flak en de debugweergave lopen via een lens die bepaalt hoe wereldposities op het scherm komen: in de lichtlaag worden de zichtkegels van de bewakers geprojecteerde veelhoeken en ronde lichten ellipsen van twee keer zo breed als hoog. Het terrein wordt eerst plat geschilderd zoals in Night Eagle; daarna neemt elke schermpixel de wereldpixel eronder, zodat de pixels scherp blijven.

Alles wat staat, is een klein 3D-model van blokjes, in code opgebouwd en bij het starten omgezet naar pixel art met een donkere omlijning: soldaten in 8 richtingen met alle animaties, voertuigen in 16 richtingen met lichte randen op het metaal, bomen, tenten, zandzakken, hekken, de wachttoren, de radiomast en de Ju 52. Gebouwen worden opgebouwd uit de muren in de leveldata, per cel van 8 bij 8, zodat soldaten ervoor en erachter in de goede volgorde staan. Loop je naar binnen, dan verdwijnt het dak en zakken de muren naar een lage rand; sta je erachter, dan worden ze doorzichtig. Lange dingen zoals een hek van 384 pixels worden in één keer getekend en daarna per cel geknipt, zonder naden.

Elk dorp heeft een kerk met een klokkentoren: natuursteen met lichtere hoekstenen, een wijzerplaat, galmgaten en een achtkantige leien spits met kruis en windhaan. Binnen staan kerkbanken en een altaar met een kruisbeeld en twee kaarsen, en daarvoor de pastoor in zwarte soutane. Loop je naar hem toe, dan groet je hem, luidt de klok en is je gezondheid weer vol. Dat kan opnieuw zodra je even bent weggelopen.

De muziek is een eigen klaagzang in G klein, live gesynthetiseerd met de Web Audio API. Eronder loopt de dalende chromatische bas van de oude klaagzangen, zoals in When I am laid in earth van Henry Purcell (1689); erboven een eigen melodie die steeds een stap omlaag zucht. Op het titelscherm zingen hoorn en violen. Tijdens het sluipen blijven een tremolo diep in de bas, een hartslag en losse zuchten over. In een gevecht gaat de bas dubbel zo snel, met pizzicato, pauken, kleine trom en de melodie in het koper; op de vlucht klimt de melodie een octaaf. De stemmen zijn dezelfde 61 zinnen als in Night Eagle. Het titelpanorama is gemaakt met de OpenAI Images API en teruggebracht tot het palet van de game.

Er zijn 525 unit-tests in Vitest en end-to-end-tests in Chromium, Firefox en WebKit, voor beide versies. De game haalt 60 beelden per seconde met 90 vijanden en laadt ongeveer 420 kB gzip, Phaser inbegrepen; de stemmen volgen op de achtergrond. Op een telefoon of tablet toont de pagina een stilstaand beeld en wordt Phaser niet geladen.

Technologieën

Phaser 3.90 TypeScript Vite Web Audio OpenAI Images API OpenAI text-to-speech

Meer van mijn werk

Bekijk het hele portfolio of lees het blog.

Meer werk