- Ein persönliches Hommage-Projekt, das VM, Blitter und Rasterizer von Another World / Out of This World ohne Standard-CPU in FPGA-Hardware implementiert
- Das Kerndesign besteht aus einer VM als realem Custom-Prozessor, einem Blitter zum Kopieren und Füllen zwischen Framebuffern, einem Rasterizer zum Zeichnen von Polygonen sowie einem SOC, das die Display-Aktualisierung bündelt
- Die 128 KB SPRAM des Lattice UP5K passen zu vier 4-Bit-Framebuffern mit 320x200; dabei entspricht jeder 32-KB-SPRAM-Block einem einzelnen Framebuffer als Speicherlayout
- Die Spieldaten sind nicht im Repository enthalten;
BANK01bisBANK0DsowieMEMLIST.BINmüssen in den OrdnerGAMEDATAkopiert werden, damit Datenpaket und Bitstream verwendet werden können - Die Ausführung ist sowohl für Simulation als auch für echte Boards vorgesehen
- Die Simulation kann nach Installation von Silice mit
make simul1das Intro starten - Hardwareseitig werden icebreaker + VGA PMOD, mch2022 badge und ULX3S HDMI unterstützt
- Ein vorab gebauter Bitstream ist enthalten, die Spieldaten werden jedoch separat benötigt
- Die Simulation kann nach Installation von Silice mit
- Die VM-Ausführung lädt Befehle und Operanden aus dem SPI-Speicher und liest zur Verringerung der Latenz zunächst 64 Byte in einen kleinen BRAM-Cache
- Der Grafikpfad verwendet vier Framebuffer, Double Buffering, Zugriffsbeschränkungen während
vblanksowie Arbitrierung der Framebuffer-Zugriffe von Blitter und Rasterizer - Der Rasterizer zeichnet die konvexen Polygone von Another World als horizontale Spans und kann für Transparenzeffekte vorhandene Pixelwerte lesen und ändern oder Pixel aus einem anderen Quell-Framebuffer kopieren
- Textrendering und einige Hintergründe aus Part 6 werden wegen des verbleibenden LUT-Budgets verarbeitet, indem vorgerenderte Pixelbuffer im ROM gespeichert und über den
op_drawString-Pfad kopiert werden - Genannte Einschränkungen und offene Arbeiten sind fehlender Sound und fehlende Musik, separate Bitstreams und Datenpakete pro Part, noch nicht abgeschlossene Verifikation des vollständigen Gameplays, Timing-Anpassungen, die schneller als im Original sind, sowie die Suche nach einer Methode zur Verbindung der Parts
- Lizenz: Silice-Design unter MIT License, Dokumentation unter CC BY-NC-SA 4.0, modifizierter C++-Port bleibt unter der bisherigen GPL, Spieldaten unterliegen dem Urheberrecht
1 Kommentare
Meinungen auf Hacker News
Solche komplett animierten Cutscenes hatte ich auf Sega zum ersten Mal gesehen, und sie waren wirklich großartig. Natürlich ist Grafik besser geworden, aber ich finde, Another World hält sich künstlerisch auch heute noch sehr gut. Der Stil ist unverwechselbar, und als ich es vor etwa einem Jahr erneut gespielt habe, war es immer noch beeindruckend.
Viele der Rätsel sind eher Trial-and-Error, und das Spiel ist extrem kurz, aber trotzdem würde ich nichts daran ändern wollen. Wer Another World mag, dem empfehle ich auch Flashback: The Quest for Identity. Es hat eine ähnliche filmische Atmosphäre; anfangs mochte ich es nicht besonders, aber in den letzten zehn Jahren ist es mir immer mehr ans Herz gewachsen.
Trotzdem ist Another World ein Kunstwerk. Das Spieleposter sieht wie ein Ölgemälde aus und ist wirklich wunderschön [1]
[1] http://www.anotherworld.fr/download/AnotherWorld_Poster.jpg
cyxx’ Reverse Engineering und JavaScript-Port von Infernal Runner für den Amstrad CPC. Es ist ein Werk des Another-World-Schöpfers, und beide nutzen eine Virtual-Machine-Architektur: https://github.com/cyxx/infernal_js
Norbert Kehrers Vortrag „The Virtual Machine Architecture of Infernal Runner“. Der Vortrag ist auf Deutsch, die Folien sind auf Englisch: https://media.ccc.de/v/vcfb20_-146-en-202010111400-_th...
The Story of Another World on the Amiga | MVG: https://www.youtube.com/watch?v=0iz9PJbs5rE
Nintendo-64-Port von Another World: https://github.com/jnmartin84/aw64
PlayStation-1-Port von Another World: https://github.com/fgsfdsfgs/rawpsx
Sie stellt einen Compiler bereit, der nach Verilog kompiliert; das Ergebnis kann man dann in bestehende Design-Flows einspeisen.
Schon als erste Handlung wegschwimmen zu müssen und danach vor einer löwenartigen Kreatur zu fliehen, gehört zu den brutalsten Spielerfahrungen aller Zeiten. Dieses Spiel bleibt einem schon nach einer Minute fürs Leben im Gedächtnis.
Für damalige Verhältnisse wirkten die dramatischen Kameraeffekte dieses Spiels wirklich wie aus einer anderen Welt, ganz wie der Titel.
Auch das Coverbild ist großartig.
konanaka beetzai! motsuubo! /wave
https://www.youtube.com/watch?v=JFaOYYSxSEA
Soweit ich mich erinnere, zeigt er auch einige der Entwicklungstools, darunter wie Animationen im Bytecode der virtuellen Maschine zeilenweise direkt bearbeitet und schrittweise ausgeführt wurden.
Heute gibt es weniger Plattformen als in der explosionsartigen Wachstumsphase der 80er. Auch heute kann man den Großteil der „Software“ als JavaScript betrachten, das vom Webbrowser interpretiert wird. Auch in den 80ern gab es Portabilitätsprobleme, und damals war es sogar schwieriger, weil man den Interpreter selbst bauen musste.
Viele, vielleicht die meisten Videospiele scheinen vor Doom beziehungsweise vor leistungsfähiger 3D-Grafik mit virtuellen Maschinen geschrieben worden zu sein. Konsolenspiele waren wegen der Performance wahrscheinlich eher in C oder Assembler geschrieben.
Damals war die Ära der „Computer“-Spiele entweder noch vor der Standardisierung auf den IBM PC, oder zumindest bevor der PC gewann und Microsoft dominierte. In einer Situation, in der unklar war, ob Amiga, PC-98, IBM PC, Mac oder etwas anderes gewinnen würde, war es sinnvoll, eine virtuelle Maschine zu bauen; SCUMM kommt einem da sofort in den Sinn.
Portabilität war zwar wichtig, aber zu einer Zeit, in der Moore’s Law mit voller Kraft wirkte und Plattformen eine Lebensdauer wie Eintagsfliegen hatten, hatten virtuelle Maschinen auch einen Kompressionseffekt. Vollständig kompilierte Binaries konnten zu viel Disketten- oder Tape-Speicher sowie RAM verbrauchen.
Eine sehr kleine virtuelle Maschine konnte dagegen eine maßgeschneiderte Sprache interpretieren, und in einer Situation, in der jedes einzelne Kilobyte zählte, sparte das erheblich Platz. Man denke nur an den Größenunterschied zwischen
print "Hello world!"und einem normal kompilierten Binary. Bei einem Textadventure nützte es nichts, wenn es noch so schnell war, solange es nicht in X KB passte.Es gab viele Text- und Grafik-Assets, während die Berechnungen vergleichsweise simpel waren. Die Constraints beim Authoring hingen mit der Hardware im Wesentlichen nur in Bezug auf Ein-/Ausgabe und Datenkompression zusammen, und der vom Interpreter ausgeführte Code bestand meist aus einmalig ausgeführter „Szeneninitialisierung“ und ein paar Animationstimern.
Die gegenteilige Idee zeigt sich besser bei Arcade-Spielen und später bei Dingen wie Doom und Quake. Das, was das Spiel simuliert, ist viel enger mit der Hardware verbunden, und die Szenendefinition ist eher Kartendaten als Skriptlogik – etwa „platziere hier ein Monster und dort ein Health-Item“.
Natürlich verwendeten die beiden Letzteren einige native Grafik-Primitivoperationen.
Mit Bitplanes muss man den Videospeicher nicht erneut lesen. Man kann annehmen, dass das höchstwertige Bit ausschließlich für Transparenzeffekte reserviert ist, und den Span einfach direkt ausgeben.
Die beiden anderen Vorteile sind, dass man die Ebenen relativ zueinander verschieben kann, um hübsche Moiré-Effekte zu erzeugen, und dass Speicher- und Busbandbreite bei krummen Farbtiefen effizient genutzt werden, die nicht sauber in Bytes oder Nibbles passen, etwa 8 Farben (3 Bit pro Pixel) oder 32 Farben (5 Bit pro Pixel).