Esta es una lista de limitaciones estáticas del motor de Doom Vanilla, incluidos Heretic, Hexen y Strife. Además, Doom Classic y Strife: Veteran Edition también están cubiertos.
Tenga en cuenta que los límites relacionados con el renderizado (como MAXVISSPRITES) no se aplican al renderizador acelerado por hardware de Strife: Veteran Edition, y solo se usan cuando el juego usa su renderizador "clásico".
El motor utiliza una serie de límites al usar matrices estáticas para almacenar datos, cuyo tamaño se define en el código.
Visplane[]
- El artículo principal de esta tema es Desbordamiento visplane.
El límite más famoso de todos, hay 128, y cada uno representa una combinación única de altura de piso o techo, nivel de luz y textura presente en una escena renderizada. En el peor de los casos, cada subsector generará al menos dos visplanes si su piso y techo están a la vista, pero estos pueden fusionarse, o dividirse, a medida que el motor del juego dibuja la escena. Las únicas formas de deshacerse de esto son hacer que su nivel sea menos detallado en las áreas visibles desde el lugar donde ocurre, agregar paredes que obstruyan la vista o mover áreas hacia arriba o hacia abajo verticalmente para que los pisos o techos no sean visibles.
Vissprites[]
- El artículo principal de esta tema es Límite de sprites visibles.
Doom no dibujará más de 128 sprites a la vez. Si existen demasiados, los adicionales parpadearán dentro y fuera de la vista, dependiendo del orden de clasificación. De hecho, lo mismo podría suceder en la versión SNES de Doom (porque SNES también tiene un límite de 128 sprites en pantalla), pero en ninguno de los niveles de Vanilla es eso posible y probablemente haría que el FPS del juego se ralentice de todos modos .
Drawsegs[]
Doom no renderizará más de 256 segmentos (128 en versiones anteriores) en una sola escena. El resto producirá el Efecto sala de espejos (HOM). Doom dibuja de adelante hacia atrás, por lo que las líneas más alejadas del jugador generalmente desaparecerán primero.
BLOCKMAP[]
- El artículo principal de esta tema es Límite de tamaño del mapa (bloques).
El mapa de bloques para un mapa vainilla no puede exceder los 65.536 bytes de tamaño. Incluso un mapa relativamente simple con solo 4 líneas definidas puede exceder el límite del mapa de bloques si está hecho para cubrir suficiente área, porque el tamaño del mapa de bloques es una función tanto del número de líneas definidas en el mapa como de la cantidad de área que cubre en 128x128 bloques. Los mapas que superan el límite del mapa de bloques pueden bloquear Vanilla Doom.
Segs/lados/lineas/subsectores/nodos[]
El número de ninguna de estas cosas puede exceder 32.768 debido a los límites de tamaño de tipo de datos en el formato del mapa. Hablando en términos prácticos, el límite de segs es siempre el primer golpe y, por lo tanto, impone un límite aún más estricto a las otras entidades, de las cuales el número de segs es parcialmente una función.
Plataformas y techos[]
Solo 30 acciones de plataforma pueden estar activas a la vez. Exceder este límite provocará un bombardeo con mensajes de error. También puede haber solo 30 efectos de techo activos a la vez, y si se excede este límite, el mapa puede comportarse de manera extraña.
Interruptores[]
Si se activan más de 16 interruptores a la vez, el juego se disparará.
Spechits[]
Cruzar más de 8 linedefs especiales en un solo tic provocará un desbordamiento interno y se generará un comportamiento indefinido.
Intercepciones[]
Si un rastreador de balas cruza demasiadas cosas y líneas (más de 128), ocurrirá un desbordamiento interno, causando un comportamiento indefinido. Esto a veces da como resultado el error conocido como "todos fantasmas".
Coordenadas[]
Debido al formato de punto fijo utilizado por Doom, la parte entera de las coordenadas es efectivamente un número de 16 bits con signo, restringido a valores entre -32.767 y 32.767. Los valores mayores simplemente no se pueden expresar.
Esta restricción de amplitud concierne tanto a las coordenadas absolutas como a las relativas, ya que las mismas unidades se usan al calcular distancias entre dos puntos, por lo que las dimensiones diagonales también se refieren. En términos prácticos, es más seguro mantener los límites del mapa entre -20.000 y 20.000.
Incluso las portaciones (source ports) con eliminación de límites generalmente no aumentan este límite, ya que aumentarlo requiere pasar a la aritmética de coma flotante o al formato de 64 bits.
Longitud de demostración[]
Las demos grabadas tienen un tamaño de archivo máximo predeterminado de 128 KB. El juego se cierra abruptamente si se alcanza este límite durante la grabación. Sin embargo, las demostraciones más largas todavía se pueden reproducir.
El límite puede aumentarse utilizando el parámetro -maxdemo, pero solo hasta la memoria libre restante del ejecutable (ver más abajo). Esto varía de una máquina a otra, pero parece superar los 4 MB (u 8 horas, 19 minutos, 19 7/35 segundos de juego en solitario).
RAM total utilizada[]
El grupo de memoria en Doom o Doom II está codificado a 6 MB (consulte el archivo i_system.c). En Doom 3: BFG Edition, el grupo de memoria para Doom y Doom II está codificado a 15 MB (consulte el archivo z_zone.cpp).
Lista[]
Nombre | Valor | Valores elevados | Notas | |||
---|---|---|---|---|---|---|
Hexen | Strife | SVE | DC | |||
BACKUPTICS | 12 | - | - | - | 64 | Se usa para dimensionar la matriz localcmds. |
HU_MAXLINELENGTH | 80 | - | - | - | - | Longitud máxima del mensaje. |
HU_MAXLINES | 4 | - | - | - | - | Número de mensajes recordados. |
LIGHTLEVELS | 16 | - | - | - | - | - |
MAX_ADJOINING_SECTORS | 20 | - | - | - | - | Se usa para encontrar el siguiente piso más alto. |
MAX_DM_STARTS | 10 | 16 | - | Removido | - | El jugador genera puntos para el deathmatch. Llamado MAXDEATHMATCHSTARTS en Hexen. |
MAXANIMS | 32 | - | 40 | 40 | - | Cantidad máxima de planos animados y tipos de textura en un nivel. (No sectores y líneas). |
MAXARGVS | 100 | - | - | - | - | Parámetros de línea de comando |
MAXBUTTONS | 16 | - | - | - | - | 4 jugadores, 4 botones cada uno a la vez, máx. No aumentó en Hexen o Strife a pesar del aumento de MAXPLAYERS. El juego no se cerrará si se supera en SVE. |
MAXCEILINGS | 30 | - | - | Removido | - | Techos activos. |
MAXDRAWSEGS | 256 | - | - | Removido | 1280 | - |
MAXEVENTS | 64 | - | - | - | - | Redes y manejo de garrapatas relacionadas. El tamaño de la matriz localcmds es MAXPLAYER * BACKUPTICS. |
MAXINTERCEPTS | 128 | - | - | - | - | Strife no se bloquea, funciona mal o sale si se excede este límite. |
MAXLIGHTSCALE | 48 | - | - | - | - | - |
MAXLIGHTZ | 128 | - | - | - | - | - |
MAXLINEANIMS | 64 | - | 96 | 96 | - | Número máximo de desplazadores de pared (tipo de línea 48) en un nivel. |
MAXNETNODES | 8 | 16 | 16 | 16 | - | Máx. de computadoras / jugadores en un juego. |
MAXOPENINGS | SCREENWIDTH*64 | - | - | 64000 | - | SCREENWIDTH es normalmente 320; sin embargo, se triplicó a 960 en el puerto Classic Doom incluido con Doom 3: BFG Edition. Un valor de 320 * 200, o 64000, es suficiente para eliminar este límite en el motor de vainilla como factor, ya que no puede haber más aperturas de las que se pueden mostrar por píxel. |
MAXPLATS | 30 | - | - | Removido | - | - |
MAXPLAYERS | 4 | 8 | 8 | 8 | - | El número máximo de jugadores, multijugador / redes. |
MAXSEGS | 32 | - | - | 161 | - | Número de solidsegs que se pueden generar en un marco. Un valor de SCREENWIDTH / 2 1 (o 161) es suficiente para eliminar este límite en el motor de vainilla como factor, ya que no puede haber más segmentos sólidos generados que este valor. |
MAXSLIDEDOORS | 5 | - | 8 | 8 | - | No utilizado, relacionado con el código incompleto de la puerta corrediza. Utilizado para puertas animadas en Strife. |
MAXSPECIALCROSS | 8 | - | - | 20* | - | Número máximo de golpes especiales (spechit). En Strife: Veteran Edition, los desbordamientos se emulan después de que se supera el límite normal de 8. |
MAXSWITCHES | 50 | - | 80 | 80 | - | Número máximo de animaciones de textura de interruptor que se pueden definir internamente. |
MAXVISPLANES | 128 | 160 | 200 | Removido | 384 | Michael Raymond-Judy menciona el aumento del límite de visplane para Heretic (era más bajo en el momento en que se creó Heretic, ya sea 32 o 64). |
MAXVISSPRITES | 128 | 192 | - | - | - | |
MAXWADFILES | 20 | - | - | - | - | El número máximo de archivos que se pueden cargar, IWAD incluidos. |
Heretic[]
Límites de Heretic | ||
---|---|---|
Nombre | Valor | Notas |
MAX_AMBIENT_SFX | 8 | Número máximo de elementos de sonido ambiental globales. |
MAX_BOSS_SPOTS | 8 | Número máximo de destinos de teletransporte para D'Sparil. |
MAX_MACE_SPOTS | 8 | Número máximo de puntos de generación de la Maza de fuego. |
Hexen[]
Límites de Hexen | ||
---|---|---|
Nombre | Valor | Notas |
MAX_ACS_MAP_VARS | 32 | Número de variables ACS separadas con alcance de mapa. |
MAX_ACS_SCRIPT_VARS | 10 | Número de variables ACS separadas con alcance local en un solo script. |
MAX_ACS_STORE | 20 | Número de scripts que se pueden iniciar "remotamente" en otros mapas. |
MAX_ACS_WORLD_VARS | 64 | Número de variables ACS separadas con alcance mundial en un Centro (hub). |
MAX_ANIM_DEFS | 20 | Número de animaciones definidas en ANIMDEFS. |
MAX_FRAME_DEFS | 96 | Número de fotogramas individuales utilizados por todas las animaciones definidas en ANIMDEFS. |
MAX_TAGGED_LINES | 64 | Número de líneas con una etiqueta distinta de cero (a través de Line_SetIdentification). |
MAX_TID_COUNT | 200 | Número máximo de actores (mobjs) con un TID distinto de cero en un mapa |