Doom Wiki
Advertisement
Doom Wiki
Formato de niveles Doom
Extensiones


Una macro es una forma de guión compilado utilizado por Doom 64. Similar a Action code script (ACS) en su función, aunque significativamente más limitada, proporciona la capacidad de ejecutar grupos de linedef especiales.

Prácticamente todos los especiales en el motor de Doom 64 se pueden ejecutar desde una macro, y hay numerosos especiales implementados en el motor del juego que se proporcionan expresamente con el propósito de establecer variables o controlar la ejecución de macros y, por lo tanto, solo funcionan correctamente cuando se usan de esa manera.

Lenguaje[]

Desafortunadamente, se desconoce el lenguaje original utilizado para generar los lumps MACROS para Doom 64, pero algunas de sus cualidades se pueden inferir de las declaraciones hechas por los mapeadores Randy Estrella y Tim Heydelaar en entrevistas públicas.

Afirmaron que el lenguaje era algo similar al de BASIC. [1] Como se desconoce el idioma original, las herramientas proporcionadas con la portación Doom64 EX proporcionan una implementación independiente para generar nuevas macros que es puramente conjetural.

Capacidades[]

En términos de capacidades, el scripting en sí mismo no es Turing completo, ya que las operaciones numéricas y lógicas básicas no se pueden llevar a cabo directamente. Tampoco hay capacidad para saltar o hacer bucles; todas las macros aparentemente en bucle en realidad están ejecutando un conjunto de instrucciones desplegadas un número preestablecido de veces. Por lo tanto, varias trampas, como los dardos que disparan desde las paredes, siempre se pueden esperar y eventualmente cesarán. Se debe proporcionar un disparador adicional para reiniciar dicha trampa después de que haya finalizado.

Los comandos de cada macro enumeran la etiqueta y el especial que se va a ejecutar, y se agrupan en lotes. Cada lote de acciones de línea se produce simultáneamente y el siguiente lote no se ejecutará hasta que hayan finalizado todas las acciones del lote actual. Esta es la única forma de control de flujo implementada.

El uso de ciertas etiquetas en las líneas de activación de macros hará que sus macros se ejecuten al inicio del nivel, al igual que los scripts abiertos de ACS.

Las macros también pueden almacenar y utilizar una única variable global. Hay un especial (204) que permite ponerlo en un valor arbitrario, y varios especiales que se referirán a este valor por sus efectos. Algunos de los especiales que usan este valor lo interpretan como un valor de punto fijo 16.16, en otras palabras, 1.0 se expresa como 65536.

El motor del juego también tiene una limitación fundamental y severa: solo se permite ejecutar una macro a la vez, globalmente. El juego pondrá en cola la ejecución de cualquier otra macro si una se está ejecutando actualmente, hasta un límite actualmente desconocido. Como resultado, esto puede permitir que los corredores de velocidad abusen del movimiento más rápido de lo previsto para bloquear la ejecución de trampas problemáticas. También puede resultar ocasionalmente en fallas que rompen el juego, ya que los diseños de los niveles pueden volverse no negociables si algunas macros no se ejecutan.

Formato[]

El lump MACROS es una característica esencial y requerida del formato de mapa de Doom 64. Es un archivo plano de estructuras binarias con los siguientes diseños. Todos los campos numéricos son little endian. Hay exactamente un encabezado de lump, en el desplazamiento cero en el lump:

Encabezado de lump
Offset Ancho Propósito
0 2 Número de macros en el bulto
2 2 Número total de comandos en todas las macros

Para cada macro enumerada en el primer campo del encabezado lump, la estructura del encabezado de macro se produce entre las listas de comandos asociados a esa macro. El encabezado de la siguiente macro se produce después de uno más el número de comandos contados en este encabezado, ya que siempre hay un comando "basura" al final de cada macro que contiene datos aparentemente no inicializados y debe ser ignorado por la aplicación de lectura:

Encabezado de macro
Offset Ancho Propósito
0 2 Número de comandos

Como se mencionó anteriormente, cada encabezado de macro va seguido de una lista de "número de comandos" + 1 de la siguiente estructura. El comando final que no se incluye en el recuento de comandos del encabezado de macro son los datos no utilizados.

Comando de macro
Offset Ancho Propósito
0 2 Número de lote
2 2 Etiqueta de línea
4 2 Línea especial

Referencias[]

  1. Tim Heydelaar (18 de enero de 2019). "Diseños de niveles de DOOM 64 tempranos y sin usar". En Foros de Doomworld.
Advertisement