Zork und Z-Machine: Wie Entwickler das Spiel von Großrechnern auf 8-Bit-Heimcomputer übertragen


Computerspiele gibt es fast genauso wie die Computer selbst. Obwohl es kaum zu glauben ist, war das Zorker Textabenteuer der Fortnite seiner Zeit. Aber Zork war auch mehr. Aus Gründen der Portabilität und Platzersparnis wurde Zork selbst in der Zork Implementation Language (ZIL) geschrieben, die das damals völlig neue Konzept der objektorientierten Programmierung aktiv nutzte und in einer virtuellen Maschine ausgeführt wurde. Und das alles geschah 1979. Die Entwickler verwendeten alle möglichen Tricks, um so viel wie möglich vom Untergrundimperium in Computer mit nur 32 KB RAM zu integrieren. Zork war jedoch nicht nur ein technologischer Durchbruch, sondern auch ein wichtiger Meilenstein in der Geschichte der Computerspiele. Gleichzeitig entstand er nicht von Grund auf neu.


DEC PDP-10 Computer-Flip-Chip-Modul

Die Computerrevolution begann während des Zweiten Weltkriegs und in den 50er und 60er Jahren glaubte man nicht aufzuhören. Immer mehr zugängliche Computersysteme für Unternehmen und Hochschulen wurden zum Verkauf angeboten. Das Laboratory of Computer Science (LCS) des Massachusetts Institute of Technology (MIT) hatte das Glück, mit ARPA zusammenzuarbeiten , das LCS und dem Laboratory of Artificial Intelligence (ehemals Teil des Projekts MAC ) des MIT erhebliche Rechenressourcen zur Verfügung stellte , die hauptsächlich von DEC PDP- Systemen bereitgestellt wurden .

Als Ergebnis erhielten Studenten der MIT Dynamic Modeling Group (LCS-Teile) Zugang zum PDP-10 KA10-Mainframe, der leistungsstärksten Maschine der Zeit. Obwohl es sich bei diesem PDP-10 um das ursprüngliche Modell von 1968 mit diskreten Flip-Chip- Transistormodulen und Wrap-Around-Bearbeitung handelte, wurde es stark modifiziert : Die Unterstützung für virtuellen Speicher und Speicherseiten wurde hinzugefügt, um den ursprünglichen Kernelspeicher von 1.152 KB zu erweitern.

Der Computer mit dem am MIT entwickelten Betriebssystem Incompatible Timesharing System (ITS) war ein hochfunktionelles Mehrbenutzersystem.

Natürlich wurde es hauptsächlich zum Spielen verwendet.

Bist du bereit für Abenteuer?


Im Frühjahr 1977 erschien am MIT ein Spiel namens Colossal Cave Adventure (oder kurz „Adventure“). Dieses Spiel war das erste Computerspiel im Genre der interaktiven Fiktion , das es dem Spieler ermöglichte, eine Textreise durch ein großes Höhlensystem zu unternehmen, das Gerüchten zufolge voller Schätze war. Fast wie in den Büchern „Choose your adventure“ trifft der Spieler seine Wahl, die ihn durch die Räume der Höhle führt und entweder den Schatz entdeckt und entkommt oder seinen frühen Tod findet.

Inspiriert von diesem Spiel erkannte eine Gruppe von LCS-Studenten, dass sie dieses Stanford-Projekt übertreffen konnten. Die Hauptschwäche von Adventure war, dass es in FORTRAN geschrieben wurde - einer Sprache, die nicht gerade für ihre gute Arbeit mit dynamischem Text bekannt war, insbesondere für die Bedürfnisse eines Spiels des interaktiven Fiktionsgenres. Im Wesentlichen war Adventure vollständig im Code verankert, was die Flexibilität einschränkte und die Erweiterbarkeit und Unterstützung des Spiels erschwerte.

In Adventure hatte jeder Raum eine numerische ID, mit der die Beschreibung in der Tabelle verknüpft war. Ein anderer Tisch bat sie um eine kurze Beschreibung. In einer anderen Tabelle wurde unter Verwendung numerischer IDs die Position von Räumen im Verhältnis zu anderen Räumen aufgelistet. Dies bedeutete, dass Sie zum Hinzufügen eines Raums alle diese Tabellen manuell bearbeiten und vorsichtig sein mussten, um keine Probleme mit diesen Änderungen zu verursachen.

Hacker-Wettbewerb



Dave Lebling nutzte die Erfahrung der Arbeit mit natürlichen Sprachen, die damals in den LCS- und AI-Labors verfügbar waren, um einen einfachen Parser zu schreiben und den Grundstein für eine Game-Engine zu legen, die der Adventure-Engine ähnelt. Dazu verwendete er die von MDL abgeleitete Programmiersprache LISP. Dank der leistungsstarken Funktionen zur Verarbeitung natürlicher Sprache haben Mark Blanc , Bruce Daniels und Tip Anderson basierend auf Leblings Arbeit das erste Prototyp-Spiel entwickelt, das im Laufe der Zeit zu dem geworden ist, was wir heute Zork nennen.

Die Revolution von Zork bestand darin, dass er im Gegensatz zu den einfachen Abenteuerbefehlen (in denen LAMP GET und GET LAMP gleichbedeutend sind) dank der hervorragenden natürlichen Sprachverarbeitungsfähigkeiten von MDL ganze Sätze verarbeiten konnte. Er konnte ganze Sätze und sogar mehrere Sätze (Teams) zu einem Satz zusammenfassen. Das Vorhandensein eines starken Parsers in Kombination mit der Leichtigkeit, neue Räume in MDL objektorientiert zu modellieren, führte dazu, dass die Welt nach dem Schreiben des Parsers und der Spiele-Engine nahezu unbegrenzt erweitert werden konnte.

Ein Raum in Zork könnte mit einem so einfachen Code eingerichtet werden:

 <ROOM "WHOUS" "This is an open field west of a white house, with a boarded front door." "West of House" <EXIT "NORTH" "NHOUS" "SOUTH" "SHOUS" "WEST" "FORE1" "EAST" #NEXIT "The door is locked, and there is evidently no key."> (<GET-OBJ "FDOOR"> <GET-OBJ "MAILB"> <GET-OBJ "MAT">) <> <+ ,RLANDBIT ,RLIGHTBIT ,RNWALLBIT ,RSACREDBIT> (RGLOBAL ,HOUSEBIT)> 

Dies setzt das "Weiße Haus" von Beginn des Spiels an, ebenso wie Ausgänge aus diesem Raum, besondere Eigenschaften von Ausgängen (zB eine verschlossene Tür) und Gegenstände im Raum. Dies stellt sicher, dass sich alle Eigenschaften des Raums, einschließlich seiner Beschreibung, Kurzbeschreibung, Eigenschaften und Beschriftungen, an einem Ort befinden. Die Game Engine kann dann einzelne Labels (Bits) von Räumen wechseln und eine zentrale Datenbank aller Räume und deren aktuellen Status speichern. Verwalten Sie Raumverbindungen während der Erstellung eines Spieldesigns, indem Sie deren Namen anstelle der numerischen IDs in der Tabelle verwenden.

Laut geschlagen


Es genügt zu sagen, dass Zork auf Großrechnern absolut fantastisch war. Auf Wunsch anderer interessierter Spieler wurde es auf das weitaus gängigere DEC TOPS-20- Betriebssystem für PDP-10 portiert. Obwohl die Zork-Entwickler so großzügig waren, dass sie es kostenlos verteilten, verteilten sie die verschlüsselte Nur-Lese-Version. Sie haben den Zork-Quellcode sogar in einem sicheren Ordner auf dem ITS-Mainframe gespeichert, für den sie das vollständig geöffnete und unsichere ITS-Mainframe-Betriebssystem patchen mussten.


Zu diesem Zeitpunkt in der Geschichte der Computer in der Welt gab es noch einige von ihnen. Das Konzept eines Heimcomputers tauchte gerade erst auf: 1977 erschienen Computer wie der TRS-80 und Apple II , aber selbst dieses System war im Vergleich zu Großrechnern, auf denen US-amerikanische Studenten zu dieser Zeit Text-Adventure-Spiele spielten, unglaublich eingeschränkt. Die Idee, ein Spiel wie Zork - eine ausführbare Datei von 1 MB - auf Heimcomputer zu portieren, schien sehr verfrüht.

Während Heimcomputer noch selten waren, blieb auch das Konzept des Verkaufs von Software an normale Verbraucher neu. Zu dieser Zeit erschien der Atari 2600 gerade im Handel und brachte die zweite Generation von Spielekonsolen auf den Markt, auf denen nicht nur ein Spiel mit Hilfe eingesetzter Kassetten gespielt werden konnte. Dies war ein neuer Markt, der Studenten des MIT, von Stanford und anderen Bildungseinrichtungen viele Fragen über den Gegensatz der Hacker-Kultur zur Welt der kommerziellen Software stellte. Einige, wie Richard Stallman , haben ihre Überzeugungen seit ihrer Studienzeit am MIT nicht geändert.

Als die Zork-Entwickler das Institut verließen, stellten sie fest, dass der Erfolg des Spiels in ihren Händen lag: Sie hatten die Chance, es zu kommerzialisieren und ihr Leben und ihre Karriere in einer völlig neuen Richtung in Bezug auf ihre ursprünglichen Ziele zu lenken. Fast ohne Behinderung wurde am 22. Juni 1979 die Firma Infocom gegründet.

Jetzt müssen wir es nur noch portieren


Es gab nur eine kleine Einschränkung bei der Verlagerung von Zork von den PDP-10-Mainframe-Systemen auf kleine Heimcomputer: Zu dieser Zeit hatte Infocom nichts zu verkaufen. Die Entwickler hatten verschiedene Spielideen, die für die Arbeit auf Heimcomputern angepasst werden konnten, aber der Hauptwert war die Portierung von Zork. Sie mussten nur das Problem lösen, 1 Megabyte MDL-Spielcode in Mikrocomputer mit 32 KB RAM (oder weniger) und winzigen Laufwerken umzuwandeln.

Außerdem wollten sie das Spiel nicht einzeln auf TRS-80, Apple II und neue Systeme portieren. Was ist, wenn Sie versuchen, einen vorhandenen MDL-Code zu verwenden? Dies war der Beginn der Entwicklung der sogenannten Z-Maschine .

Natürlich wollten sie zunächst das Problem der Kompatibilität von Zork mit Mikrocomputern lösen und das Spiel durch Löschen von Inhalten reduzieren . Sie haben viel abgeschnitten und es geschafft, sich der Größe von Adventure anzunähern. Dann machten sie etwas Ähnliches mit MDL und entfernten alle Funktionen, die Zork nicht brauchte. So entstand die Zork Implementation Language (ZIL), in die Zork problemlos mit MDL portiert werden konnte. Danach konnte der ZIL-Compiler viel kleinere ausführbare Dateien als der MDL-Compiler erstellen.

An der Beschreibung der Messinglaterne von Zork auf ZIL können wir erkennen, dass es einfacher zu lesen ist als MDL:

  <OBJEKT LATERNE
 (LOC WOHNZIMMER)
 (SYNONYM LAMP LATERNE LICHT)
 (ADJEKTIV MESSING)
 (DESC "Messing Laterne")
 (FLAGGEN TAKEBIT LIGHTBIT)
 (AKTIONSLATERNE-F)
 (FDESC "Eine batteriebetriebene Laterne ist auf der Trophäe
 Fall. ")
 (LDESC "Es gibt eine Messinglaterne (batteriebetrieben)
 hier. ")
 (GRÖSSE 15)> 


Das war natürlich wundervoll, aber trotzdem war es nicht möglich, Zork auf der TRS-80 zu starten. Natürlich könnten sie zu diesem Zeitpunkt einen ZIL-Compiler für jede Plattform sowie eine ausführbare ZIL-Datei schreiben, um später viel Zeit damit zu verbringen, jedes Spiel auf jeder Zielplattform einzurichten. Stattdessen haben sie beschlossen, eine virtuelle Maschine zu schreiben: Z-Machine. Tatsächlich war es eine ideale Plattform für textbasierte Abenteuerspiele, die ZIL-Binärdateien direkt unterstützten und viele Optimierungen implementierten, von denen die wichtigste das Packen von Zeichen in 5 Bits war, das dem Bodo-Code ähnelte.

Dank all dieser Optimierungen, einer virtuellen Maschine und ihrer eigenen Programmiersprache gelang es ihnen, die abgeschnittene Welt von Zork I zusammen mit einem Interpreter (virtuelle Maschine) in eine 77-Kilobyte-Verlaufsdatei zu packen. Da es sich damals noch um mehr als 32 KB Arbeitsspeicher handelte, wurde in der virtuellen Maschine ein virtuelles Speichersystem implementiert, bei dem nur dynamische Daten (Variablen) in den Arbeitsspeicher geladen und bei Bedarf alle statischen Daten (Text) von der Diskette gelesen wurden.

Vorwärts in die Zukunft



Apple II-Disketten hatten eine Größe von 140 KB und TRS-80-Disketten hatten eine Größe von 180 KB, dh das Speicherplatzproblem wurde behoben. Lediglich der Interpreter musste für die Zielplattform optimiert werden, sodass zukünftig in allen von Infocom produzierten Spielen derselbe Interpreter verwendet werden konnte, ohne dass auf separate Plattformen portiert werden musste. Sie hatten noch viel Inhalt aus der Mainframe-Version von Zork geschnitten. Sie waren bereit für die Fortsetzung.

Nach dem kommerziellen Erfolg von Zork I produzierten die Entwickler weiterhin Teile, die aus der ursprünglichen Mainframe-Version in Form von Zork II und Zork III geschnitten wurden. Jahr für Jahr wuchs der Umsatz von Zork I weiter und es wurde zu einem Muss-Kaufspiel, das oft mit neuen Systemen gebündelt wurde. Es wurden neue Versionen von Z-Machine entwickelt, in denen neue Funktionen für noch komplexere Spiele hinzugefügt wurden. Auch heute können wir die Infocom-Spiele genießen , ohne auf Kompatibilitätsprobleme achten zu müssen: Die Zork-Quellen auf MDL wurden veröffentlicht sowie der Quellcode für andere klassische Infocom-Spiele . Wenn Sie Zork schon lange nicht mehr oder nie gespielt haben, schauen Sie sich an, was im Spiel vor sich geht. Man kann ohne den geringsten Unterschied sagen, dass eine Gruppe von Hackern von US-Universitäten in den 1970er Jahren sehr wahrscheinlich die Zukunft der Welt der Videospiele und des interaktiven Geschichtenerzählens bestimmen würde.

Source: https://habr.com/ru/post/de479690/


All Articles