FANDOM

1.057 Páginas

Formato de niveles Doom


El Mapa de bloques (BLOCKMAP) es una estructura pre-calculada que el motor del juego utiliza para simplificar la detección de colisiones entre cosas en movimiento y paredes. Es decir que se utiliza para determinar el momento en que algo que se mueve golpea contra una pared o cuando dos cosas (una o ambas en movimiento) chocan.

El BLOCKMAP es simplemente una red de "bloques" cada 128 × 128 unidades (o el doble del tamaño de la rejilla de piso). Puede visualizarse activando el modo "red" en el automapa.

De manera similar a cómo se utilizan los nodos para determinar cuando una línea debe o no debe ser dibujada, el lump BLOCKMAP se utiliza para el cálculo de una colisión cosa / pared. Cada bloque contiene cero o más linedefs, aunque normalmente no son muchas (y ciertamente no tantas como en la totalidad del mapa) y así en la detección de colisiones por una cosa en movimiento el motor de Doom sólo tiene que ejecutar cálculos en cada linedef en el mismo bloque que la cosa en movimiento (en lugar de hacerlo en todo el mapa).

Internamente, la BLOCKMAP se utiliza para las colisiones cosa / cosa con cada bloque de mantener una lista dinámica de todas las cosas que contiene. Usando el mismo principio que las colisiones cosa / pared, el motor necesita sólo comprobar posibles colisiones por cada par de cosas que comparten el mismo bloque.

Problemas

Si un nivel no tiene un BLOCKMAP se mostrará muy bien, pero todo el mundo caminará a través de las paredes, y nadie podrá herir a nadie más tampoco. Cabe señalar que los source ports modernos suelen construir un nuevo mapa de bloques desde cero si no existe uno; es una operación rápida y fácil ya que no tiene que ser sometido a las mismas restricciones de tamaño que un lump WAD.

También vale la pena señalar que, debido a la forma en que el motor original hacía los cálculos, si el centro de una cosa estaba en el mismo borde de un bloque y el centro de otra estaba en el borde del bloque adyacente no habría detección de colisiones ya que ambas cosas se consideraban en diferentes bloques. Este error, con el que sin duda muchos jugadores están familiarizados, es el resultado de la exe original (y de muchos source ports actuales) por usar sólo el centro de una cosa para determinar si estaba en un bloque y no tomar en cuenta el radio. Colin Phipps proporciona una explicación del fenómeno. Lo arreglaron en ZDoom, sin embargo esto altera la jugabilidad haciendo actores más fáciles de golpear.

Estructura

Los mapas de bloques se componen de tres partes: la cabecera, el desplazamiento y la lista de bloques.

Cabecera

La cabecera de 8 bytes contiene 4 enteros cortos:

Offset Tamaño (bytes) Descripción
0 2 Coordenada x del origen de cuadrícula
2 2 Coordenada y del origen de la cuadrícula
4 2 Número de columnas (bloques en la dirección x)
6 2 Número de filas (bloques en la dirección y)

El origen de la red de bloques está ubicada en la esquina inferior izquierda del bloque de abajo a la izquierda (sudoeste). El constructor de mapas de bloque de Id Software este punto de origen en 8 menos que los valores mínimos de x e y obtenidos en cualquier vértice en el nivel.

El número de columnas y filas tiene que ser suficiente para contener todos los linedef en el nivel. Si hay linedefs fuera del BLOCKMAP, el juego no será capaz de evitar que los monstruos o jugadores crucen esos linedefs, lo que puede causar problemas, incluyendo el efecto sala de espejos.

Desplazamiento

Offset Tamaño (bytes) Descripción
8 2 Desplazamiento al bloque 0
10 2 Desplazamiento al bloque 1
. . .
8 + 2 * (N - 1) 2 Desplazamiento al bloque  N - 1

Observe que hay N bloques, que es igual a las columnas × filas (de la cabecera). Todos los desplazamientos son en relación con el inicio del lump BLOCKMAP y sin signo, lo que significa que pueden llegar hasta los 65.535 en lugar de 32.767 (como la mayoría de las otras estructuras WAD). Además, los desplazamientos no son en bytes, sino en cortos, por lo que el tamaño máximo de un BLOCKMAP en Vanilla Doom es de aproximadamente 128 KB, y no 64 KB.

Lista de bloques

Tamaño (bytes) Descripción
2 0x0000
2 Linedef 0 dentro del bloque
2 Linedef 1 dentro del bloque
. . .
2 0xFFFF

La lista de bloques siempre comienza con 0 y termina con -1. En el medio hay un listado de todos los linedefs de cuales existe alguna parte dentro del bloque. Cualquier linedef en la frontera de dos bloques se colocará sólo en el bloque del lado derecho de la línea de las líneas verticales y el bloque en la parte superior de la línea de las líneas horizontales.

Fuente

¡Interferencia de bloqueo de anuncios detectada!


Wikia es un sitio libre de uso que hace dinero de la publicidad. Contamos con una experiencia modificada para los visitantes que utilizan el bloqueo de anuncios

Wikia no es accesible si se han hecho aún más modificaciones. Si se quita el bloqueador de anuncios personalizado, la página cargará como se esperaba.

También en FANDOM

Wiki al azar