Doom Wiki
Advertisement
Doom Wiki
HXN Puerta corrediza

Una puerta corrediza consta de dos poliobjetos que se deslizan en direcciones opuestas

Un poliobjeto (polyobject) típicamente consiste en un grupo movible de linedefs de un solo lado conectadas en un único subsector. Esta extensión del motor de Doom fue implementada originalmente en Hexen por el programador Ben Gokey de Raven Software.

Se añadieron al motor de juego con el fin de dar a los creadores de mapas de Raven una más amplia paleta de puertas, maquinaria, trampas de trituración y paredes secretas de empuje que la anteriormente disponible, para cerrar un poco la brecha con los motores más modernos.

Teoría[]

A pesar de que una partición binaria del espacio (binary space partitioning o BSP) resulta en un árbol BSP estático que no es susceptible de geometría dinámica, es posible explotar el mapeo convexa completa de espacio proporcionado por el árbol para insertar objetos dinámicos, siempre que obedezcan ciertas restricciones:

  • Los objetos dinámicos no deben cruzarse con ninguna geometría estática.
  • Los objetos dinámicos no deben intersectar entre sí.
  • Los objetos dinámicos mismos deben ser convexos y, o bien deben estar contenidos totalmente en un solo subsector o dividirse en fragmentos que a su vez estén contenidos dentro de los subsectores individuales.

En tanto que la geometría dinámica de cada subsector sigue estas reglas, se pueden dibujar primero, antes de que el contenido normal del subsector y se mantendrán las otras suposiciones implícitas en el algoritmo de renderizado BSP.

Pueden aparecer problemas técnicos en la representación cuando los poliobjetos cruzan líneas de nodos (y por lo tanto se solapan con geometría estática o con subsectores adyacentes), que pueden ser parcialmente pero no completamente disminuido por el uso de un constructor de nodos denominado "poliobjetos-consciente", que incluye el  popular ZDBSP.

Implementación original[]

Como se ha mencionado más arriba, los poliobjetos eran originalmente una innovación en el código base de Hexen. En Hexen, los poliobjetos se utilizan principalmente para crear puertas corredizas o giratorias, paredes pulsables y peligrosas trituradoras horizontales. Dado que los poliobjetos también están vinculados al BLOCKMAP como linedefs normales, es posible para ellos cortar el movimiento de las cosas, así como empujar las cosas que los bloquean y opcionalmente infligir daños por aplastamiento mientras lo hacen.

Los líneas especiales de Hexen que permiten la creación y la manipulación de poliobjetos son conocidos por los siguientes nombres ACS:

  • Polyobj_DoorSlide
  • Polyobj_RotateLeft
  • Polyobj_OR_RotateLeft
  • Polyobj_RotateRight
  • Polyobj_OR_RotateRight
  • Polyobj_DoorSwing
  • Polyobj_Move
  • Polyobj_OR_Move
  • Polyobj_MoveTimes8
  • Polyobj_OR_MoveTimes8
  • Polyobj_StartLine
  • Polyobj_ExplicitLine

Las dos últimas líneas especiales se utilizan para identificar las líneas que pertenecen al poliobjeto. Debido a las limitaciones del formato de mapa Hexen, no puede haber más de 256 poliobjetos en un solo mapa. Adicionalmente, Hexen impone un límite artificial de 64 segs por poliobjeto. Hexen sólo puede soportar de forma fiable un poliobjeto por subsector, y no puede tratar de manera adecuada con los poliobjetos que se superponen en subsectores adyacentes o que están hechos para moverse demasiado lejos de su punto de generación.

Poliobjetos

Configuración común de una puerta corrediza poliobjetos (izquierda) y captura de cómo se vería en el juego (derecha).

Los poliobjetos Hexen requieren además dos cosas para identificar la posición en la que se construyeron en el mapa, y cómo ese punto se relaciona con la posición en la que deben estar colocados en tiempo de ejecución.  Estos tipos de cosa son el "punto de anclaje", con número DoomEd 3000, que deben ser colocados cerca de las líneas que forman parte del objeto, y los "puntos de generación", con los números DoomEd 3001 ó 3002, que se utilizan como la ubicación en tiempo de ejecución de origen del poliobjeto. El poliobjeto es trasladado a esta ubicación moviendo el punto de anclaje al punto de aparición, y moveiendo todas las línedefs de modo que su relación con el punto de anclaje siga siendo constante.

Advertisement