Jede Höhle nimmt eines von vier Farbthemen an (Wand, Erde, Felsbrocken je Thema), bei jedem Levelstart zufällig gewählt:
Jede geschaffte Höhle zählt ein Level weiter, ein Lauf geht dabei unbegrenzt weiter. Die Levelnummer bestimmt den Schwierigkeitsgrad, aus dem das nächste Leveldesign gezogen wird:
Innerhalb eines Laufs wird kein Leveldesign zweimal gezogen — außer in Schwierigkeitsgrad 5, wo Wiederholungen wegen der unbegrenzten Levelzahl unvermeidbar sind.
Level mit Schwierigkeitsgrad 1 haben KEIN Zeitlimit — ideal zum Eingewöhnen. Ab Schwierigkeitsgrad 2 läuft die Uhr: Start bei 200 Sekunden, danach 5 Sekunden weniger pro Level (mindestens 90). Enthält das gezogene Design Sanduhren (siehe Objekt 7 oben), können die diesen Zeitverlust ausgleichen. Alle 5 Level gibt es zusätzlich ein Bonus-Leben (bis maximal 5 Leben insgesamt). Ein zweiter, unabhängiger Weg zu einem Bonus-Leben: Wird eine Höhle geschafft, nachdem wirklich ALLE ihre Diamanten eingesammelt wurden (nicht nur die benötigte Anzahl), gibt es ebenfalls ein Bonus-Leben — beides kann sich auf demselben Höhlenwechsel addieren, jeweils weiterhin gedeckelt bei maximal 5 Leben. Da Graben und Schieben sich nicht rückgängig machen lassen, kann man sich durch eigene Züge trotzdem in eine Sackgasse hineinmanövrieren — dann hilft nur Neustart (R).
Zum Anhören anklicken (bewusst leise gehalten):
Fünf feste, von Hand gebaute Höhlen für gezieltes manuelles Testen bestimmter Situationen — anders als jede normale Höhle IMMER identisch aufgebaut, ohne Zeitlimit und ohne dass Leben den Testlauf beenden können (jeder Absturz oder Sieg lädt dieselbe Höhle sofort neu). Aufrufbar über Strg+1 bis Strg+5 oder direkt hier per Klick; Escape verlässt ein Testlevel wieder zur normalen Zufallshöhle.
Was bedeutet "lösbar"? Eine Höhle gilt als lösbar, wenn die benötigte Mindestanzahl Diamanten eingesammelt werden kann UND der Spieler danach lebend den Ausgang erreicht — nicht mehr und nicht weniger. Dabei kann es nötig sein, einzelne Felsbrocken zur Seite zu schieben, um an einen Diamanten oder den Ausgang zu gelangen. Nicht jeder in der Höhle liegende Diamant muss dabei erreichbar sein: Es reicht, wenn genug davon (die benötigte Anzahl, nicht zwingend alle) sicher sammelbar sind — einzelne Diamanten können durchaus unerreichbar bleiben, ohne dass die Höhle deshalb als unlösbar gilt.
Zusätzliche Taste, solange ein Testlevel aktiv ist: Mit der Maus lässt sich ein Bereich aufziehen (Klicken + Ziehen); Entf entfernt danach alle Objekte darin vollständig (nicht nur graben — echter Leerraum), außer der äußeren Randmauer. Bewegen bleibt davon unberührt, unverändert auf Pfeiltasten/WASD, auch D für "nach rechts". P/Enter (Rasterstand in die Konsole ausgeben), ü (Koordinaten-Overlay) und L (Lösungs-Nachvollzug, siehe Tastaturbelegung oben) funktionieren dagegen überall, nicht nur im Testlevel — praktisch auch hier, aber keine testlevel-exklusiven Werkzeuge mehr. Der Lösungs-Nachvollzug zeigt WARUM die Höhle als lösbar gilt (welche Felder der Solver in welcher Runde erreicht, welche Felsbrocken er verschiebt), ist aber keine garantiert sichere Zug-für-Zug-Anleitung (echtes, sequentielles Spielen kann die Gefahrenlage einzelner Felder zwischenzeitlich anders verändern als die auf einmal rechnende Solver-Simulation).
Jede Höhle wird zufällig aus einem festen Pool kuratierter Leveldesigns gezogen (5 Schwierigkeitsgrade, siehe "Level & Schwierigkeit" oben für die Levelnummer-Zuordnung) — jedes Design darin ist bereits vorab als lösbar geprüft. Welches Design innerhalb des Schwierigkeitsgrads und welche Höhlenfarbe verwendet werden, ist reiner Zufall. Mit G öffnet sich jederzeit ein Auswahl-Popup: Kurzname eines Designs eingeben und "Starten" klicken beginnt einen normalen neuen Lauf, bei dem Level 1 exakt dieses Design lädt (ab Level 2 wieder normal zufällig). Dort außerdem: "Leveldesignpool herunterladen" lädt den kompletten aktuellen Pool als Datei herunter, um eigene Designs dauerhaft zu sichern (auch direkt per ä-Taste, ohne das Popup erst zu öffnen) — die Datei danach manuell als `boulderdash-leveldesigns.js` im Projektordner speichern und in git übernehmen. Alle aktuell vorhandenen Designs, gruppiert nach Schwierigkeitsgrad 1 (leicht) bis 5 (schwer):
M schaltet aus jedem laufenden Spiel heraus in einen Bearbeitungsmodus für den GERADE angezeigten Rasterstand um (HUD zeigt "Designmodus"; alle Tasten dafür siehe "Tastaturbelegung" oben). Physik ist ausgeschaltet — nichts fällt oder rollt von selbst, egal wie instabil eine Anordnung aussieht. Pfeiltasten bewegen einen Auswahlrahmen statt des Spielers; Ziffern 1-7 malen das jeweilige Objekt auf den Rahmen oder eine per Maus gezogene Mehrfachauswahl. Der Spieler (1) gibt es dabei immer nur einmal, eine neue Position räumt die alte; Ausgänge (6) dürfen dagegen beliebig oft verteilt werden — jeder verhält sich gleich und führt bei genug Diamanten ins nächste Level. Die äußere Randmauer lässt sich nie verändern. Erneutes M verlässt den Modus und öffnet ein Speichern-Popup: Name, Kurzname, Schwierigkeitsgrad, Diamanten insgesamt, benötigte Diamanten, eine "Von mir geprüft"-Markierung und "Trotz Warnungen speichern" sind dort frei einstellbar (vorbelegt mit den Werten des Designs, auf dem die Bearbeitung aufbaute) — leere Felder werden automatisch vergeben, ein bereits vergebener Kurzname fragt vor dem Überschreiben nach. "Diamanten insgesamt" dient dabei nur der Bestätigung: Der tatsächlich gespeicherte Wert kommt immer frisch aus dem aktuellen Raster, ein abweichender Eintrag wird abgelehnt. Jedes Level MUSS lösbar sein — mindestens ein Ausgang ist deshalb IMMER Pflicht, ohne Ausnahme. Für Schwierigkeitsgrad 1 gelten zwei weitere Bedingungen: keine Sanduhr im Raster, und wirklich jeder Diamant muss über den echten Solver erreichbar sein (die Meldung nennt dann die genauen (x,y)-Koordinaten der nicht erreichbaren Diamanten) — beides wird beim Speichern geprüft, nicht nur behauptet. Anders als die Ausgang-Pflicht sind diese beiden Bedingungen aber nur WARNUNGEN: "Trotz Warnungen speichern" (Standard: aus) erlaubt das Speichern trotzdem, für Fälle, in denen die Abweichung bewusst in Kauf genommen wird.
Kurzname eines Leveldesigns aus dem Pool eingeben und starten — beginnt einen normalen neuen Lauf, bei dem Level 1 exakt dieses Design lädt (danach normal zufällig weiter).
Als neues oder vorhandenes Leveldesign im Pool ablegen. Leerer Name/Kurzname wird automatisch vergeben.