Prozedurale Level-Generierung

Christoph Kaindel
Dieser Browser verfügt über keine HTML-Canvas-Unterstützung.
Räume (3-25): Gänge: Stil: Eckendeko:
Anzeige: Durchgänge: Stil: Eckendeko:
Schritte (100-5000): Trägheit: Stil: 180 Grad:
Start(30-80%): G: H: Ü: Gen.: Stil:
Typ: max. Höhe: Frequenz: Kurven: Stil:
Typ: Felder: Insel: Berge:
Methode: Trägheit: Stil:
Wahrscheinlichkeit (10-90%): Einzelne entfernen: Stil:
Kacheln: Stil: Sackgassen: Gitter:
Typ: Felder: Abstand: Metrik:
Seed:
The Dungeons of Moria war das erste Computer-Rollenspiel, das ich jemals gespielt habe; das muss etwa 1985 gewesen sein. Wie im Vorgängerspiel Rogue, nach dem das Genre der Roguelikes benannt ist, waren die Levels prozedural generiert, die Grafik bestand nur aus ASCII-Zeichen, Geräusche oder gar Musik gab es nicht. Neu in Moria war eine kleine Oberwelt, wo man Beute verkaufen und sich vor dem Abstieg in den Dungeon ausrüsten konnte. Es gilt daher als direkter Vorläufer von Diablo.
Das Spiel bot unzählige Handlungsmöglichkeiten, die über die der meisten damaligen Spiele weit hinausgingen. Damals habe ich in einer wöchentlichen Tabletop-Rollenspielrunde (AD&D) gespielt, und Moria war das erste Computerspiel, das der Pen&Paper-Erfahrung einigermaßen nahe kam.

Diese Übersicht einiger Algorithmen für die prozedurale Level-Generierung war ursprünglich das Nebenprodukt eines Roguelike-Projektes, an dem ich eine Weile gearbeitet habe. Dann bin ich hier ziemlich reingekippt... Mein Roguelike liegt mittlerweile auf Eis, aber an dieser Webseite bastle ich immer wieder, füge hier und da Abschnitte oder Einstellungsmöglichkeiten hinzu.

Ich habe versucht, die Algorithmen möglichst kurz zu beschreiben. Wer sich für Details interessiert, findet in jedem Abschnitt Links zu ausführlichen Erklärungen und Tutorials.

Wenn auf dieser Seite von "zufällig" die Rede ist, sind pseudozufällig generierte Werte gemeint. Mit dem Seed bzw. Startwert wird der Pseudozufallszahlengenerator initialisiert, hier ein Xorshift-Generator. Der Seed wird beim Laden der Seite aus den Sekunden- und Millisekundenwerten der Systemzeit generiert. Er darf nicht auf Null gesetzt werden.

Links: