Genesis | Realisierung | Illustration | Versionen |  
  ANOTHER WORLD  
  Realisierung  
  Ausrüstung
Ein Amiga 500 mit 1 MB RAM + 20 MB Festplatte, Ein Camcorder, ein Genlock und ein Videorecorder um Animationen nach der Rotoskopietechnik zu erzeugen. Ein Kassettenrecorder um Toneffekte aufnehmen zu können.


"Dinge die man für das rotoskopieren braucht...…"

Software
Kommerzielle Applikationen::
Deluxe Paint, ein superbes Werkzeugt für die Pixelkunst welches ich hin und wieder für Hinterngründe nutzte.
Devpac assembler, um damit die Spiel-Engine und die Poligon-Strukturen zu erzeugen.
GFA basic, um den Spiel-Editor für Another World zu erzeugen.

Mit dem aufkommen der 16 bit Maschinen wurde die C Programmiersprache und deren Verbreitung bei der Spiele-Industrie, welche viele Vorteile gegenüber Assembler hat (Portabilität, Stuckturierung und leicht zu verstehen) immer größer. Drei Jahre bevor ich ein Grafikdesigner für einige Zeit wurde versuchte ich es ohne Erfolg an einem Atari ST. Der Compiler war unzuverlässig, der kleinste Fehler führte zu einem Computerabsturz und die Compilingzeiten waren zum verzweifeln. Dieses Experiment hat mir wirlich den Spaß verdorben. Da ich immer schon einfachheit gemocht hatte gefielen mir die aufstrebenden Programmiersprachen welche kein Complieren brauchten daher orientierte ich mich intuitiv auf GFA Basic. So einfach wie ein standard Basic und sehr gut strukturiert durch ein System welches lokal Variablen managed, ähnlich wie C. GFA ist ein Nebenbei, man kann die Features erweitern in dem man externe, in Assembler geschrieben Programme aufruft. Und das ist es was ich gemacht habe. Ich nutzte das beste von beiden, GFA um schnell den Spiele-Editor zu erzeugen und Assembler nur für die Engine und die Grafischen Teile welche die höchste Performance brauchten. Zwischen den zwei Programmen mussten die Spiele Daten interpretiert werden!


Spieleditor:
Ich wollte ein komplettes Werkzeug bekommen das es mir erlauben würde das ganze Spiel zu erzeugen und zu testen ohne immer alles kompilieren zu müssen oder die Applikation dauernd ändern zu müssen.

Ich mag es nicht Zeit mit Technologie zu verschwenden, das gilt besonders für die Dinge die das Betriebssystem macht.

Also, die ersten Ziele waren:

- Die Spiel-Logik sollte in einer plattform-unabhängigen Sprache kodiert werden, ohne das es nötig wäre alles neu zu kompilieren oder Daten anzupassen. So orientierte ich mich ganz natürlich Richtung Script-Interpreter. Ich entwickelte eine Mini-Sprache welche 64 unabhängige Kanäle und 256 Variablen bot.

- Polygone zusammenfügen: jede visuelle Einheit des Spiels wurde aus vielen Polygonen zusammengesetzt, deshalb war es wichtig viele Polygone zu wenigen zusammenzufassen um den Umgang damit zu vereinfachen. Am Beispiel eines Charakters.



- Hierarchische Struktur am Bildschirm: Die Polygongruppen konnten zusammengestellt werden um ein neues Teil zu erstellen. Die hierarchische Struktur verhinderte Redundanzen durch die Erzeugung eines Prioritäts-Systems. So konnten zum Beispiel erstellte Polygongruppe für einen Kopf des Heldens in allen Phasen der Animation wiederverwendet werden.


Rotoskopie :
Diese bei traditioneller Animation genutzte Technik wird mit real gefilmten Schauspielern gemacht wobei dann die Bewegungsphasen dann Schritt für Schritt auf Zelluloid kopiert werden.

Zu versuchen das zum ersten mal am Computer zu machen war wie DIY ... die technologie war schwer zu nutzen. Der erste Gedanke war Zellophan als Pauspaper zu nutzen. Es bedeutet Zellophan auf den Fernsehbildischirm zu legen um die Umrisse mit Filzstift abzupausen während des Videobild auf Pause steht um dann die Pause auf dem Computerbildschirm zu heften und es mit einem Grafikprogramm zu reproduzieren. Diese Methode ist nicht einmal so schlecht für statische Bilder wie zum Beispiel einer Zeichnung. Ich hatte sie schon bei "Le pacte" für Amstrad genutzt aber diese Methode im ganze Spiel bei allen Videosequenzen zu nutzen wäre verrückt gewesen. Die zweite Idee war ein GenLock an den Amiga anzuschließen. Das ist ein Apparat der es dem Computer erlaubt echtzeit Videos zu interpretieren, welche zum Beispiel einem Camcorder kommt.... Es klingt simpel, aber das war nicht der Fall, weil es damals keine DVD Player oder digitalen Camcorder gab die ein perfektes Standbild hatten. Der einzige Apparat welcher durch jede Einzelbild akkurat ohne Flimmern darstellen konnte war ein VHS ITT Videospieler der einen digitalen Einzelbildspeicher hatte. So musste ich also alle aufgenommenen Sequenzen von dem analogen Camcorder auf das VHS Band bringen... Tatsächlich wurde jedes Videobild mit dem Editor kopiert. Ich musste so schnell wie möglich sein weil der Videorekorder nicht lange auf Pause stand weil er automatisch wieder anlief um das Band zu schonen. Es war eine Zeitrennen von dem besonders das Intro profitieren konnte.

Zwei Videosequenzen aus dieser Zeit welche ich für den Rotoskopieprozess genutzt habe :
Auszug 1 , Auszug 2.


Detaillierte Beschreibung der Spielenginge :

I. Der Polygon Editor :



Auf das Bild klicken um die Beschreibung der Icons zu sehen.



II. Script Editor:


Das Spiel wurde in einem Programmiersprachenmix aus Basic und Assembler gemacht. Oben im Fenster findet man die änderungsfunktionen und unten Zeile für Zeile der Code. Der Befehlssatz der Sprache ist sehr reduziert, nur circa dreißig "Wörter". Und damit wurde die Spielelogik programmiert, inklusive der Joystickbefehle.


Befehlsset :

Befehle bezogen auf Grafik, Sound, Palette und Medien:

Load "Datei Nummer"

Ladet eine Datei in den Arbeitsspeicher, zum Beispiel als Sound, Level oder Bild.

Play "Datei Nummer" Note, Lautstärke, Kanal
Spielt die Sound-Datei auf einem der vier Audiokanäle mit der angegebenen Lautstärke und Tonhöhe.

Song "Datei Nummer" Tempo, Position

Initialisiert ein Musikstück.

Fade "Palette Number"
Wechselt die Farbpalette.

Clr "Bildschirmbuffer Number", Farbe
Löscht den Bildschirmbuffer mit einer Farbe.
Es gibt 4 Bildschirmbuffer im Spiel.

Copy "Bildschirmbuffer Nummer A", "Bildschirm Buffer B"

Kopiert den Inhalt des Bildschirmbuffer A in den Bildschirmbuffer B.

Show "Einzelbild Nummer" :
Zeigt das nächste Einzelbild an.

SetWS "Einzelbild Nummer" :
Setzt den Arbeits-Einzelbild, das ist der auf dem die Polygone gezeichnet werden, auf Default.

Spr "'Objekt Name" , x, y, z

Zeichnet im Arbeits-Einzelbild das grafische Tool zur Koordinate x,y und dem Zoomfaktor z. Ein Polygon, eine Gruppe von Polygonen...

Text "Text Nummer", x, y, Farbe

Zeigt im Arbeits-Einzelbild den angegebenen Text an der Koordinate x,y.


Variablen und ihr Handhabung :
Set.i Variable, Wert
Initialisiert die Variable mit einem integer Wert zwischen -32768 und 32767.


Set Variable1,Variable2
Initialisiert Variable 1 mit Variable 2.
Variable1 = Variable2


Addi Variable, Wert
Variable = Variable + Integer Wert


Add Variable1, Variable2

Variable1 = Variable 1 + Variable2


Sub Variable1, Variable2
Variable1 = Variable1 - Variable2


Andi Variable, Wert
Variable = Variable AND Wert


Ori Variable, Wert
Variable = Variable OR Wert


Lsl Variable, N
Macht eine N bit Rotation nach Links auf der Variable. Null nach rechts.


Lsr Variable, N
Macht eine N bit Rotation nach Rechts auf der Variable.


Befehlssektion :

Jmp Adresse
Setzt die Codeausführung an der angegebenen Stelle fort.


Jsr Adress
Führt die Subroutine an der angegebene Adresse aus.


Return

Ende einer Subroutine.


Bedingungsbefehle:
Si (Variable) Bedingung (Variable und Wert) jmp Adresse
Bedingungsbefehl,
Wenn (Si=) der Vergleich der Variable Wahr ist wird der Code an der angegebene Adresse fortgesetzt.


Dbra Variable, Adresse
Verringert die Variable, wenn das Ergebnis von Null abweicht an der angegebenen Adresse.


Zu guter Letzt, strukturelle Befehle :

Setvec "Kanal Nummer", Adresse
Initialisiert einen Kanal mit einer Codeadresse.

Vec Anfang, Ende, Type
Löscht, sperrt und entsperrt eine Serie von Kanälen.

Break
Stoppt den Kanal Zeitweise und springt zum Nächsten.

Bigend
Stoppt den ausführenden Kanal permanent und geht zum Nächsten.

Die Spiel-Ausführung ist in 64 unabhängige Ausführungskanäle mit 256 Variablen strukturiert. Etwa wie Multitreading.
Jeder Kanal führt einen Teil des Codes aus. Zum Beispiel managed ein Kanal die Bewegung und Logik des Helden und ein weiter die dazugehörige Darstellung. Der nächste Kanal zeigt Vögel im Hintergrund, der nächste steuert eine vorgegebene Animation durch ein vordefiniertes Ereignis.

Kanäle werden der Reihe nach ausgeführt, der Breakbefehl zeigt an zum nächsten Kanal zu springen. Wenn Kanal 64 erreicht ist wird das Einzelbild angezeigt und der Zyklus starten von neuem. Jeder Kanal kann einen weiteren Kanal mit dem Setvec Befehl initialisieren. Im Beispiel unten sehen wir, dass Kanal 2 eine Spielfigur steuert, er entscheidet zu Schießen und initialisiert in Kanal 64 den Code um einen Laserschuss anzuzeigen.

Folge den Bild um die Evolution zu verfolgen.


Der Laser wird autonom und verschwindet wenn er außerhalb des Bildschirms ist. Wenn er etwas trifft, zum Beispiel eine Tür, dann initialisiert das eine Variable, die dann die Tür explodieren lässt.

Der Fluss der Einstellungen in den Kanälen wird nur durch die 254 globalen Variablen im Spiel gesteuert. Selbst die Joystick Positionen wurden mit diesen Variablen geschrieben.


>> Zur Illustrationsseite