----------------------------
CG2/3 bungen, SS99
Abschnitt 3
Wolfgang Bauer
Stefan Jakl
----------------------------

bersetzung, Programmstart, Geschwindigkeit:
--------------------------------------------
Das Programm wurde bersetzt mit Visual C++ 5.0, Compiler-Einstellung
"Release".
Ins Projekt mssen die Toolbox-Dateien aufgenommen werden.
Entwickelt und getestet wurde es hauptschlich auf einem P200,
aber auch einem P133.
Das Programm pat sich an die CPU-Geschwindigkeit an (fr CPUs 
schneller als 200MHz ungetestet).

Achtung: 
- Zum erfolgreichen Start mu unbedingt die Datei "colors.dat" im
  Programmverzeichnis vorhanden sein!
- Unter Windows 2000/XP muss der Kompatibilittsmodus fr
  Windows 98 aktiviert werden!

Bedienung:
----------
Bewegung durch den Ziffernblock:
 7  - nach links drehen
 9  - nach rechts drehen
 8  - nach vor gehen
 2  - zurck gehen
 4  - nach links gehen
 6  - nach rechts gehen
Alt - langsam gehen
Strg- laufen
Esc - Ende
F1  - Goraud-Shading aus- bzw. einschalten
F2  - Texture-Mapping aus- bzw. einschalten

Ziel:
-----
Das Ziel ist es, aus dem Dungeon zu entkommen, d.h. den Ausgang zu
finden. Das wird dadurch erschwert, da man nur begrenzte Energie
besitzt, die durch jeden Schritt reduziert wird. Allerdings liegen
Gegenstnde herum (Flaschen, Dosen, Kse), die die Energie wieder
auffrischen. Auerdem findet man Schlssel, mit denen man Tren
ffnen kann. Aber Achtung: Man kann gleichzeitig nur 5 Schlssel
herumtragen.
Hinweis: Der Ausgang befindet sich im 2. Level. Diesen erreicht man
ber Stiegen, die sich hinter der 1. Tr rechts befinden...

Zum Programm:
-------------
Das Programm verwendet einen Raycasting-(Doom-)Algorithmus.
Das Spielfeld ist 32x32 Felder gro. Zur Geschwindigkeits-
optimierung verwendet der Algorithmus vorberechnete trigonometr. Tabellen.
Es kommen auch einige Objekte im Labyrinth vor (Einschrnkungen: konvex,
Flchen sind Drei- oder Vierecke), die mittels eines scanlineorientierten
YX-Polygonfll-Algorithmus mit (abschaltbarem) Goraud-Shading am Bildschirm
dargestellt werden (die Lichtquelle ist der Spieler selbst). Die Sichtbarkeitsberechnung
der Objekte erfolgt folgendermaen:
	- wenn der Raycasting-Algorithmus ein Feld mit einem Objekt durchquert, wird dieses
          in eine Liste aufgenommen. Die Bildschirmspalte wird mitgespeichert (= 1. Spalte,
          in der das Objekt sichtbar ist)
	- nach jeder Bildschirmspalte werden alle Objekte in dieser Liste, die in
          dieser Spalte nicht mehr getroffen wurden, entfernt und in die Zeichenliste
          eingetragen. Es wird wieder die Spalte mitgespeichert (= letzte Spalte, in
          der das Objekt sichtbar ist)
        - die Zeichenliste ist nach der Entfernung zum Spieler sortiert.
        - nachdem der Raycasting-Algorithmus fertig ist (und die Wnde gezeichnet sind),
          werden die Objekte in der Zeichenliste gezeichnet
        - nicht sichtbare Polygone werden durch Backface-Culling entfernt
        - der Polygonfll-Algorithmus zeichnet die Polygone nur innerhalb der beiden
          mitgespeicherten Bildschirmspalten => Clipping an Blidschirmrndern,
          von Wnden verdeckte Teile werden nicht gezeichnet
Das Texture-Mapping ist leider etwas langsam, das liegt aber hauptschlich daran, da
die Spans mit MGL_setPixelCoord() gezeichnet werden. Mit direktem Bildschirmzugriff
wre es schneller, die im Skriptum beschriebene Methode funktionierte allerdings nicht
(falsche Farben).
Intern werden alle Farben als 18 Bit-RGB-Werte (je 6 Bit pro Anteil) berechnet. Zur
Darstellung werden aus einer Tabelle (aus Geschwindigkeitsgrnden vorausberechnet) die
entsprechenden (d.h. hnlichsten) Farbtafeleintrge geholt. Wegen des Speicherbedarfs
der Tabelle erfolgte die Beschrnkung auf 18 Bit (24 Bit => Tabellengre 16MB).

