Dwarf Fortress ist kein Open Source-Produkt, und obwohl es eine Menge Vermutungen und Reverse Engineering gibt, die dazu beitragen können, dass alles funktioniert, werde ich mich stattdessen auf einige grundlegende Techniken zur Optimierung eines 3D-Roguelike (keine 3D-Grafik, 3D-Welt) des konzentrieren gleichen Typs.
Wie bei allen Videospielen gibt es viel Rauch und Spiegel, die durch einfache Regeln und Systeme die Illusion von Komplexität erzeugen. Diese reichen von der Verwendung einfacher Zufallszahlen für ziellose Bewegungen bis hin zum Vorbacken eines hochrangigen Netzes von Knoten für die Wegfindung.
Bewegung
Apropos Pfadfindung: Dieses Problem kann für große Räume oft sehr schwierig zu lösen sein, wie es bei einer DF-Karte der Fall ist (bis zu 768 x 768 x 64 IIRC). Das Problem kann jedoch auf folgende Weise vereinfacht und beschleunigt werden:
- Vorgefertigtes Knotennetzwerk: Wenn die Karte erstellt wird, kann die Welt in Blöcke unterteilt werden, und für jeden Block können die Ausgänge und Eingänge zugeordnet werden. Wenn ein Block aktualisiert wird, z. B. wenn eine Wand erstellt wird, muss nur das Netzwerk dieses Blocks aktualisiert werden.
- Etappenweise Pfadfindung: Das Ausführen eines Pfads über die gesamte Karte, Zelle für Zelle, würde viel Zeit in Anspruch nehmen. Stattdessen würden Sie über das größere Chunk-Netzwerk, das die gesamte Verbindung zwischen Chunks zuordnet, nach Pfaden suchen und dann nur einen Pfad innerhalb eines Chunks ausführen, wenn dies der Fall ist von Stück zu Stück bewegen. Dies macht 2 Dinge für Sie. Es beschleunigt die Wegfindung, indem es sich über viele kleinere Teile aufteilt, und es ermöglicht dem Gerät auch, die Richtung auf einem Teil des Weges zu ändern, wenn ein Block aktualisiert wird. Es würde den Pfad über das große Netzwerk ändern, wenn einer der Knoten aktualisiert werden muss.
- Zufallssteuerung: Wenn sich die Einheit nicht zu einem Ziel bewegt, muss sie nur ziellos gehen. Viele Roguelikes bewegen das Gerät nur in eine zufällige Richtung, was sich unnatürlich anfühlt. Es können verschiedene Lenktechniken verwendet werden. Einfache bevorzugen es, sich in einer geraden Linie zu bewegen und haben immer weniger Chancen, sich in die nach hinten strahlenden Richtungen zu bewegen, was nur eine Chance von etwa 1% hätte. Daher kehrte das Gerät manchmal die Richtung vollständig um, aber nur selten.
Ich werde nicht auf die Grundlagen der Wegfindung eingehen. Die meisten Roguelikes verwenden A *, aber es gibt andere Methoden, um die Katze zu häuten. Mmmm Katzenleder ..
Persönliche Aufgaben
Eines der wichtigsten Dinge, die DF-Einheiten zum Platzen bringen und sich lebendig fühlen lassen, ist ihre persönliche Zielliste. In Wahrheit haben viele Roguelike-Spiele dies auf einer grundlegenden Ebene. Grundsätzlich hat jede Einheit eine Liste von Wünschen (und für deine Dörfer Aufgaben, die sie möglicherweise annehmen, um die du bittest) und sie werden sie basierend auf ihrer Persönlichkeit auswählen (Statistiken).
Einige Aufgaben haben Anforderungen. Um einen Lederrock herzustellen, muss das Dorf in einem Geschäft mit X Artikeln sein. Also werden diese alle überprüft und als Aufgaben zu ihrer Liste hinzugefügt. So einfach ist das.
Da eine Einheit die meiste Zeit unterwegs ist, können die Überprüfungen, welche Einheiten gerade aktiv sind, sehr schnell vonstatten gehen. Nur wenige Einheiten treffen zu einem bestimmten Zeitpunkt eine Auswahl, sodass es insgesamt auch für Hunderte oder gar keine Verlangsamung gibt Tausende von Einheiten. Und denken Sie daran, dass in DF alles, von Bienen über Höhlenbewohner bis hin zu Bäumen, Einheiten sind.
Bei einigen zusätzlichen Nachforschungen wird deutlich, dass DF eine schreckliche Arbeit bei der Suche nach Wegen im Allgemeinen leistet. Es zerlegt die Karte nicht in Teile, es zerlegt die Karte in Segmente oder Bereiche, die miteinander verbunden sind (was besser ist als nichts sicheres), so dass meine obige Einschätzung noch weniger ein Beispiel dafür ist, wie DF funktioniert, als ich gedacht habe. :) Was nicht heißt, dass DF aus einer Million anderer Gründe alles andere als verblüffend ist.
Es zeigt, dass in einem Spiel das Spielgeschehen wichtig ist. Keine Grafik, keine großartige Programmierung, kein großartiges Schreiben, keine großartige Musik, nicht einmal die Benutzeroberfläche; nichts anderes ist sogar 1% so wichtig wie das Spiel selbst.