Maze-Definition

Eine Maze-Definitionsdatei ist an der Endung „.pmd“ zu erkennen. Es handelt sich um eine XML-Datei in der Kodierung UTF-8. Diese Kodierung unterstützt auch die deutschen Sonderzeichen. Die drei Achsen des Koordinatensystem sind:

  • X-Achse (Rot), von links nach rechts (Querachse)
  • Y-Achse (Grün), von unten nach oben (Hochachse)
  • Z-Achse (Blau), von hinten nach vorne (Längsachse)
Koordinatensystem
  • Jeder Parameter hat das Format: Parameter=“Wert“
    Der Wert muss in Anführungszeichen stehen.
    Bsp.: PosDeltaX=“-6″
  • Grundsätzlich ist zu beachten, das Dezimalzahlen mit einem Punkt (.) als Dezimaltrenner zu schreiben sind.
    Bsp.: PosY=“-0.12″
  • Definitionen werden von einem Tag umgeben:
    <Tag-Name Parameter1=“Wert1″ Parameter2=“Wert2″ … />
    Bsp.: <HEADER Type=“MazeConfig“ />
  • Ein Maze breitet sich immer von dem Ursprung (X=0, Y=0 und Z=0) in alle Richtungen aus.
  • Kommentare müssen innerhalb eines Kommentar-Tags stehen:
    <!– Kommentartext –>
    Bsp.: <!– Außenwände –>
  • Jede Maze-Definition hat die nachfolgende Struktur, die eingehalten werden muss.
<?xml version="1.0" encoding="UTF-8"?>
<XML_PME_INTERFACE>
  <HEADER Type="MazeConfig" />
  <!-- Maze-Grund-Definition -->
  <MAZE ...  />
  <!-- Außenwände -->
  <BORDER ...  />
  <!-- Objektliste -->
  <COMPONENT_LIST>
    <!-- Der Boden -->
    <COMPONENT ... />
    <!-- Objekte -->
    <COMPONENT ... />
  </COMPONENT_LIST>
</XML_PME_INTERFACE>
  • Sie beginnt immer mit der XML-Kennung, gefolgt von den Tags <XML_PME_INTERFACE> und <HEADER>.
  • Im Tag <Maze … /> werden Name, Größe und Aufgabe des Mazes festgelegt
  • Im Tag <Border … /> wird definiert, wie die Außenmauern aussehen
  • Danach kommt innerhalb der Tags <COMPONENT_LIST> und </COMPONENT_LIST> die Liste aller Objekt, die sich im Maze befinden sollen. Jedes Objekt wird innerhalb eines <CPOMPONENT … />-Tags definiert.
  • Ein <COMPONENT>-Tag mit den Boden (Base) sollte auf jeden Fall definiert werden. Ein Maze ohne Boden hat aber auch seinen Reiz.

Die Größe eines Mazes wird über die Parameter DimX, DimY und DimZ im <Maze …/>-Tag festgelegt, wobei diese Werte jeweils in die positive und negative Richtung verwendet werden. Somit hat ein Maze mit DimX=30, DimY=4 und DimZ=20 die Ausdehnung von -30 bis +30 auf der X-Achse (Querachse, von links nach rechts), -4 bis +4 auf der Y-Achse (Hochachse, von unten nach oben) und -20 bis +20 auf der Z-Achse (Längsachse, von hinten nach vorne). Somit beträgt die Gesamtgröße des Mazes 60*8*40 (X*Y*Z).

Nachfolgend die Defintion eines einfachen Mazes mit zwei Reihen an Wänden einem Altar und einer Sonne, die rotiert.

<?xml version="1.0" encoding="UTF-8"?>
<XML_PME_INTERFACE>
  <HEADER Type="MazeConfig" />
  <!-- Maze-Grund-Definition -->
  <MAZE Name="MazeFirst" DimX="30" DimY="4" DimZ="30" Levels="1" Texture="Textures/grass" 
    Repetition="10" ShowFloor="false" UsersTask="Es kann nur einen geben!" 
  />
  <!-- Außenwände -->
  <BORDER Variant="Complete" PosDeltaX="10.0" PosDeltaY="0" PosDeltaZ="0" Scale="1.0" 
    Model="Models/Playground/Wall10" Texture="Models/Playground/Textures/Wall" 
  />
  <!-- Objektliste -->
  <COMPONENT_LIST>
    <!-- Der Grassboden -->
    <COMPONENT Name="Base" Type="Base" Model="Models/Bases/Base60x60" PosX="0" PosY="-0.12" 
      PosZ="0" RotX="0" RotY="90" RotZ="0" PosDeltaX="0" PosDeltaY="0" PosDeltaZ="0"
      Scale="1.0" Repetition="1"   Texture="Textures/Grass" 
    />
    <!-- Vier Wände vertikal, beginnen an der Positiion X=-20 und Z=-12 -->
    <COMPONENT Name="Wand1" Type="Walls" Model="Models/Playground/Wall6" PosX="-20.0" 
      PosY="0" PosZ="-12.0" RotX="0" RotY="90" RotZ="0" PosDeltaX="0" PosDeltaY="0" 
      PosDeltaZ="6.0" Scale="1.0" Repetition="5" Texture="Models/Playground/Textures/Wall"        
    />
    <!-- Vier Wände horizontal, beginnen an der Positiion X=-12 und Z=-20 -->
    <COMPONENT Name="Wand2" Type="Walls" Model="Models/Playground/Wall6" PosX="-12.0" 
      PosY="0" PosZ="-20.0" RotX="0" RotY="0" RotZ="0" PosDeltaX="6.0" PosDeltaY="0" 
      PosDeltaZ="0" Scale="1.0" Repetition="5" Texture="Models/Playground/Textures/Wall"   
    />
    <!-- Der Altar im Zentrum -->
    <COMPONENT Name="Altar" Type="Walls" Model="Models/Playground/Altar" PosX="0" PosY="0.0"   
      PosZ="0" RotX="0" RotY="0" RotZ="0" PosDeltaX="0" PosDeltaY="0" PosDeltaZ="0"
      Scale="1.0" Repetition="1" Texture="Models/Playground/Textures/Altar" 
    />
    <!-- Der Sonne im Zentrum -->
    <COMPONENT Name="Sun" Type="Walls" Model="Models/Sphere" PosX="1.5" PosY="4" PosZ="-0.5" 
      RotX="0" RotY="0" RotZ="0" PosDeltaX="6" PosDeltaY="0" PosDeltaZ="0" Scale="2.0" 
      Repetition="1" Texture="Textures/Sun" ActionType="Automatic" RotDeltaX="0"   
      RotDeltaY="12.0" RotDeltaZ="12.0" 
    />
  </COMPONENT_LIST>
</XML_PME_INTERFACE>

Diese Definition legt das folgende Maze fest.

Ein erstes Maze

Maze-Elemente

Ein Maze wird aus den nachfolgenden Objekten aufgebaut.

  • Feststehende Objekte: Das sind z.B. Wände, Statuen etc., die feststehen und an denen die Spielfigur hängenbleibt. Sie kann nicht durch diese Objekte hindurchgehen.
  • Bewegliche Objekte: Das können z.B. Tore sein, die auf- und zugehen oder auch Wände, die sich bewegen oder drehen.
  • Objekte mit Aktionen: Objekten können Aktionen zugeordnet werden. Z.B. einem Schlüssel, dass dieser eingesammelt werden kann. Objekten können gleichzeitig mehrere Aktionen zugewiesen werden.
  • Objekte, die Aktionen auslösen oder beenden: Ein Objekt kann die Aktionen eines oder mehrerer anderer Objekte auslösen oder beenden.
  • Unsichtbare Bereiche, mit und ohne Aktionen: Unsichtbare Bereiche werden zum einen dafür verwendet, um das Einsetzen eines Spielers in so einen Bereich des Mazes zu unterbinden. Des Weiteren können unsichtbaren Bereichen Aktionen zugeordnet werden, z.B. eine Falle für den Spieler. Unsichtbare Bereiche können darüber hinaus auch die Aktionen anderer Objekte und unsichtbarer Bereiche auslösen oder beenden.

In den nachfolgenden Kapiteln werden die einzlenen Möglichkeiten beschrieben.