Doom Wiki
Advertisement
Doom Wiki

Un generador de números pseudoaleatorios (pseudorandom number generator) es un algoritmo que produce una sucesión de números que resulte una muy buena aproximación a un conjunto aleatorio de números.

El generador de números pseudoaleatorios utilizado por el motor de Doom es simplista pero adecuado para el juego. Su simplicidad tiene la virtud de la velocidad.

Implementación[]

El archivo m_random.c en el código fuente de Doom contiene una tabla estática de 256 bytes de longitud que contiene números entre 0 y 255 en un orden fijo y aleatorizado. Hay un índice en esta tabla que comienza en cero. Cada llamada a la función P_Random avanza el índice en uno, redondeando a cero después de 255, y devuelve la entrada de la tabla que corresponde a ese índice.

Hay otra función, M_Random, que es idéntica, excepto que utiliza su propio índice independiente. P_Random se usa en situaciones de simulación de juego, como en el caso de calcular el daño producido por un golpe. De lo contarrio, se utiliza M_Random.

El motivo de la existencia de dos índices individuales es para mantener la sincronización multijugador: por ejemplo, M_Random se utiliza para aplicar una variación de tono aleatorio a los sonidos. Como dos jugadores pueden no escuchar el mismo efecto de sonido (ya que pueden estar en diferentes partes del nivel), el uso de un solo índice haría que el juego se desincronice. Para usar una analogía del modelo vista-controlador, P_Random se usa para la generación de números aleatorios en el 'modelo', mientras que M_Random se usa para la generación de números aleatorios en la 'vista'.

La función M_ClearRandom restablece los índices de ambas funciones a cero. Se llama durante la inicialización de cada juego nuevo para que las demostraciones sean iguales cada vez que se jueguen, y para que los juegos multijugador estén sincronizados.

Aunque la tabla tiene 256 bytes de largo, no contiene todos los números entre 0 y 255 inclusive. Por ejemplo, el valor 0 aparece dos veces y el 1 no aparece en absoluto; el valor 145 aparece cinco veces, más que cualquier otro número. Por lo tanto, los valores no están distribuidos uniformemente, pero en realidad casi lo están. El valor medio es 128,852, mientras que sería 127,500 si todos los valores fueran igualmente probables. Todo esto sugiere que la tabla se generó utilizando un generador convencional de números pseudoaleatorios de calidad razonable.

Historia[]

La misma tabla de números aleatorios utilizada por Doom también se encuentra en las bases de códigos Hovertank 3D y Catacomb 3-D. Una serie que acompaña a los números de la sucesión de Fibonacci sugiere que la secuencia podría haber sido una salida serializada de un generador anterior de Fibonacci retrasado.

Se puede encontrar un código similar en la fuente original de Catacomb, pero la tabla en sí no se encuentra en ninguna parte, ya que se genera dinámicamente en tiempo de ejecución en ese motor de juego.

Enlaces externos[]

Advertisement