Doom Wiki
Advertisement
Doom Wiki
Formato de niveles Doom
Extensiones

Nodos (nodes) es el nombre de un lump WAD que es un componente de un nivel. Normalmente se genera automáticamente a partir de otros datos para el nivel, usando una herramienta de creación de nodos.

El lump NODES constituye una partición binaria del espacio (BSP) del nivel. Es un árbol binario que ordena todos los subsectores en el orden correcto para el dibujo. Cada entrada de nodo tiene una línea de partición asociada con él, que divide el área que el nodo representa en un área secundaria izquierda y un área secundaria derecha. Cada área secundaria puede ser otra entrada nodo (un subnodo), o un subsector en el mapa.

Algunos sectores no requieren ningún tipo de división. Por ejemplo, consideremos un sector cuadrado: todas las paredes son ortogonales al suelo (las paredes son todas hacia arriba y hacia abajo), por lo que desde cualquier punto de vista dentro del cuadrado, ninguno de sus cuatro paredes posiblemente pueda bloquear la vista de cualquiera de las otras.

Ahora imaginemos un sector con la forma de este dibujo:

Nodos

El círculo rojo a la izquierda es el punto de vista, mirando hacia el este. La pared diagonal marcada (A) no puede ser vista en absoluto desde allí, mientras que la pared vertical marcada (B) está parcialmente oculta por la otra pared en diagonal.

Este sector tiene necesariamente que ser dividido.

Supongamos ahora que la pared diagonal (A) se extiende, hasta tocar la pared norte. Cada uno de los dos subsectores resultantes son suficientes, ya que en cualquiera de los dos, no hay pared que forme parte del bloques subsector que bloquee a otra. Esta sería la línea de partición.

Ahora, surge una complicación adicional debido a las linedefs de dos caras. Sus dos lados están en diferentes sectores, por lo que van a terminar en diferentes subsectores también. Así, cada linedef de dos caras se convierte en dos segmentos (SEG) (o más), o usted podría decir que cada sidedef se convierte en un segmento. La creación de sidedefs segs es una buena idea, porque el seg a continuación puede estar asociado con un sector. Dos segs que no forman parte de un mismo sector no es posible que estén en el mismo subsector, por lo que se requiere una mayor división de cualquier conjunto de segs que no son todos del mismo sector.

Siempre que se necesita hacer una división, un SEG es seleccionado, algo arbitrariamente, que junto con sus extensiones imaginarias, divide el espacio restante en dos (de este modo binario). Este seg es la línea de partición de un nodo, y los espacios restantes a ambos lados de la línea de partición serán las áreas secundarias derecha e izquierda del nodo.

Todas las líneas de partición tienen una dirección y el espacio en el lado "correcto" de la partición es el área secundaria derecha del nodo; el espacio de la "izquierda" es el área secundaria de la izquierda. Tenga en cuenta que si no existe un seg en el espacio restante que puede servir como una línea de partición, entonces no hay necesidad de una partición más allá, es decir, es un subsector y una "hoja" en el árbol de nodos.

Como las líneas de partición se seleccionan y los nodos son creados, debe mantenerse un orden estricto. El árbol de nodos se crea desde "arriba" y bajando. Una vez realizada la primera división, entonces el área secundaria izquierda se divide, luego su área secundaria izquierda, y así sucesivamente, hasta que el área secundaria de un nodo es un subsector. Entonces se mueve de nuevo al árbol una rama, y ​​se divide el área secundaria derecho, luego su izquierda, etc. SIEMPRE la izquierda primero, en el camino hacia abajo.

Estructura[]

Cada nodo tiene 28 bytes en 14 [cortos] campos:

Campo Offset Tamaño (bytes) Descripción
1 0 2 Coordenada x de comienzo de la línea de partición (1)
2 2 2 Coordenada y de comienzo de la línea de partición (1)
3 4 2 Cambio en x hasta el final de la línea de partición (1)
4 6 2 Cambio en y hasta el final de la línea de partición (1)
5 a 8 8 8 Cuadro delimitador derecho (extremos superior e inferior) (2)
9 a 12 16 8 Cuadro delimitador izquierdo (extremos superior e inferior) (2)
13 24 2 Área secundaria derecha (3)
14 26 2 Área secundaria izquierda (3)

(1) Si los primeros cuatros campos fuesen, por ejemplo, de valores 64, 128, -64, -64, la línea de partición comenzaría en el punto de coordenadas (64,128) y finalizaría en el punto de coordenadas (0,64).

(2) Cada uno de los dos cuadros delimitadores describen un rectángulo que es el área cubierta por cada uno de los dos nodos secundarios respectivamente. Un cuadro delimitador consta de cuatro valores cortos (arriba, abajo, izquierda y derecha) que dan los límites superior e inferior de la coordenada y los límites inferior y superior de la coordenada x (en ese orden).

(3) El tipo de cada área secundaria está determinada por su bit de signo (bit 15). Si el bit 15 es cero, el área secundario da el número de nodo de un nodo secundario. Si el bit 15 se establece, entonces Bits 0-14 dan el número de un subsector.

Ejemplo: E1M1[]

Nodo raiz E1M1

Este diagrama muestra la división del nodo raíz en el nivel E1M1: Hangar (Doom). (El nodo raíz es la entrada con el número más alto en el lump).

La línea de partición se muestra en amarillo, con un pequeño signo de número dibujado en el punto medio de su lado derecho. La línea de partición se extiende en ambas direcciones utilizando una línea azul.

El cuadro delimitador derecho se dibuja en color verde y el cuadro delimitador izquierdoo se dibuja en color rojo.

Como era de esperar, la línea de partición divide el mapa más o menos a la mitad. Todos los puntos en el mapa están ya sea a la derecha o a la izquierda de la línea de partición del nodo raíz.

Aparece el cuadro de límite a la derecha en el lado oeste del diagrama porque la línea de partición apunta hacia abajo (de norte a sur), como lo señaló el símbolo de hash en su lado oeste.

Nodo sub E1M1

El segundo diagrama muestra cómo se subdivide a su ve el primer subnodo izquierdo.

Las dimensiones de las cajas se superponen, pero es la línea de partición la que se utiliza para determinar qué nodo secundario de este nodo en particular le pertenece.

Fuente[]

Advertisement