Dwarf Fortress no es de código abierto, y si bien hay muchas conjeturas e ingeniería inversa que pueden explicar cómo funciona todo, en cambio me centraré en algunas técnicas básicas para optimizar un roguelike 3D (no gráficos 3D, mundo 3D) del el mismo tipo.
Como es el caso con todos los videojuegos, hay mucho humo y espejos que crean la ilusión de complejidad a partir de reglas y sistemas simples. Estos van desde el uso de números aleatorios simples para un movimiento sin rumbo hasta la cocción previa de una malla de nodos de alto nivel para encontrar caminos.
Movimiento
Hablando de pathfinding, esto a menudo puede ser un problema muy difícil de resolver para espacios grandes como puede ser un mapa DF (hasta 768x768x64 IIRC), sin embargo, el problema puede simplificarse y acelerarse de esta manera:
- Red de nodos previamente horneados: cuando se crea el mapa, el mundo se puede dividir en fragmentos, y cada fragmento puede tener sus salidas y entradas asignadas. Cuando se actualiza un fragmento, como cuando se construye un muro, solo es necesario actualizar la red de ese fragmento.
- Búsqueda de ruta por etapas: ejecutar una ruta en todo el mapa, celda por celda, llevaría mucho tiempo, en su lugar, buscaría en la red de fragmentos más grande, que asigna toda la conexión entre fragmentos, y luego solo ejecutaría una ruta dentro de fragmentos moviéndose de un pedazo a otro. Esto hace 2 cosas por ti. Acelera la búsqueda de ruta al dividirla en muchas piezas más pequeñas, y también permite que la unidad cambie de dirección a lo largo de la ruta cuando se actualiza un fragmento. Volvería a recorrer la red grande si alguno de los nodos que necesita para actualizarse.
- Dirección aleatoria: cuando no se mueve hacia una meta, la unidad solo necesita caminar sin rumbo. Muchos roguelikes simplemente mueven la unidad en una dirección aleatoria, lo que se siente poco natural. Se pueden usar varias técnicas de dirección, las simples favorecen moverse en línea recta y tienen cada vez menos posibilidades de moverse en las direcciones que irradian hacia atrás, lo que tendría solo un 1% de posibilidades. Por lo tanto, la unidad a veces invierte la dirección por completo, pero solo en raras ocasiones.
No cubriré los conceptos básicos de la búsqueda de caminos. La mayoría de los roguelikes usan A *, pero existen otros métodos para desollar al gato. Mmmm Cat cuero ..
Tareas personales
Una de las principales cosas que hace que las unidades de DF exploten y se sientan vivas es su lista de objetivos personales. En verdad, muchos juegos roguelike tienen esto en un nivel básico. Esencialmente, cada unidad tiene una lista de deseos (y para sus dormitorios, tareas que podrían tomar y que está pidiendo que se hagan) y elegirán según su personalidad (estadísticas).
Algunas tareas tienen requisitos. Hacer una falda de cuero requiere que el dorf esté en tal o cual tienda que tiene X artículos. Entonces, todos se verifican y se agregan como tareas a su lista. Simple como eso.
Dado que la mayoría de las veces una unidad estará en tránsito, las verificaciones de lo que están haciendo las unidades pueden ser muy rápidas, solo unas pocas unidades elegirán en un momento dado, por lo que, en general, no hay desaceleración incluso para cientos o miles de unidades Y recuerde, en DF todo, desde abejas hasta trogloditas y árboles, son unidades.
Al hacer una investigación adicional, está claro que, de manera divertida, el DF está haciendo un trabajo terrible de encontrar caminos en general. No está dividiendo el mapa en trozos, está dividiendo el mapa en segmentos o áreas que están conectadas (lo cual es mejor que nada seguro), por lo que mi evaluación anterior es incluso menos un ejemplo de cómo funciona el DF de lo que pensaba. :) Lo que no quiere decir que DF sea nada menos que sorprendente por un millón de otras razones.
Esto demuestra que lo importante en un juego es el juego. Ni gráficos, ni gran programación, ni gran escritura, ni buena música, ni siquiera la interfaz; nada más es incluso un 1% tan importante como el juego en sí.