Doom es un juego del género First Person Shooter desarrollado en 1993. El 23 de Diciembre de 1997, Bernd Kreimeier publicó el código fuente, inicialmente bajo licencia NPL.

Repositorio

Random

El archivo m_random.c contiene la implementación del generador de números aleatorios del engine.

xkcd: Random Number

m_random.c

Análisis

Haciendo un análisis rápido de la clase podemos determinar

  • rndtable es una tabla que contiene 256 valores desordenados entre 0 y 255.
  • M_ClearRandom es una función que inicializa los índices rndindex y prndindex.
  • Las funciones P_Random y M_Random poseen exactamente la misma implementación pero utilizan índices diferentes. Ambas retornan un valor “random”.

Hoy en día la solución puede parecer graciosa pero si viajamos al pasado y consideramos que el objetivo principal del juego eran las familias 80386/80486 de Intel, el desafío para el desarrollador era implementar un algoritmo devorador de recursos en un hardware donde no sobraban.

Conclusión

Los valores de la tabla sugieren que fue generada con un algoritmo denominado PRNG. El desarrollador creó un array con los valores generados y, cuando se solicita un valor aleatorio, incrementa el índice y devuelve el valor de la posición. De esta forma

  1. Obtiene un valor “suficientemente aleatorio” para sus fines.
  2. Garantiza la velocidad de resolución y el cuidado de los recursos del sistema.