Doom Wiki
Advertisement
Doom Wiki


Normalmente, en Vanilla Doom los efectos de sonido disminuyen su volumen de acuerdo con la distancia, con un límite de 1.200 unidades de mapa. No se escuchan los efectos de sonido que se originan a una distancia de más de 1.200 unidades del jugador. Sin embargo, este comportamiento es diferente en el nivel 8. Esto afecta al nivel 8 cuando se juega en cualquier episodio de Doom / The Ultimate Doom, así como en los MAP08 de Doom II o Final Doom.

Al jugar en el nivel 8, los efectos de sonido no se cortan. Como todos los niveles de jefe en Doom ocurren en el nivel 8, es posible que este comportamiento fuera para que el jugador siempre pudiera escuchar al monstruo jefe desde cualquier distancia.

Como efecto adicional, si el volumen de los efectos se reduce a cero, aún se reproducen, pero muy bajo. En este escenario, el efecto de la distancia sobre el volumen se invierte. Los efectos de sonido cercanos son silenciosos, mientras que los efectos de sonido a distancia son fuertes.

Demostrando el efecto[]

Para demostrar este efecto se debe hacer lo siguiente:

  1. Iniciar un juego Doom y saltar al nivel 8 mediante el código de trucos idclev08.
  2. Despertar algunos monstruos, atacándolos.
  3. Activar el truco "sin recorte" (idclip o idspispopd) y caminar hacia afuera del mapa, lejos de cualquier monstruo.
  4. Notar que los gruñidos de los monstruos aún se pueden escuchar a pesar de la distancia.
  5. Ir al menú de sonidos y mover el control deslizante de volumen de los efectos de sonido hasta el nivel mínimo.
  6. Todavía se pueden escuchar a los monstruos. Vuelve de regreso hacia los monstruos.
  7. El volumen de los monstruos disminuye al acercarse a ellos.

Aspectos técnicos[]

La causa de esto se encuentra en s_sound.c en el código fuente de Doom:

// From _GG1_ p.428. Appox. eucledian distance fast.
approx_dist = adx + ady - ((adx < ady ? adx : ady)>>1);
 
if (gamemap != 8
&& approx_dist > S_CLIPPING_DIST)
{
return 0;
}

Este código calcula la distancia del emisor del sonido hasta el jugador. Si el sonido es mayor que la distancia de recorte (1.200 unidades), la función regresa y el sonido no se reproduce. Sin embargo, se hace una prueba específica para ver si el nivel actual es el nivel 8. Si es así, no hay límite de distancia.

// volume calculation
if (approx_dist < S_CLOSE_DIST)
{
*vol = snd_SfxVolume;
}
else if (gamemap == 8)
{
if (approx_dist > S_CLIPPING_DIST)
approx_dist = S_CLIPPING_DIST;
*vol = 15+ ((snd_SfxVolume-15)
*((S_CLIPPING_DIST - approx_dist)>>FRACBITS))
/ S_ATTENUATOR;
}
else
{
// distance effect
*vol = (snd_SfxVolume
* ((S_CLIPPING_DIST - approx_dist)>>FRACBITS))
/ S_ATTENUATOR; 
}

Este es el código que disminuye el volumen de los efectos de sonido con la distancia. Aquí se usa un cálculo diferente para el nivel 8. Siempre se agrega un valor de 15 al volumen, por lo que en todos los casos estará por encima de cero.

Diferencias entre Vanilla Doom y el código publicado[]

El examen del código fuente de Doom que fue publicado puede ser engañoso debido a un cambio realizado en el código de sonido antes del lanzamiento del código fuente. En Vanilla Doom, hay dos variables que mantienen el volumen del efecto de sonido. Una de estos se llama "sfxVolume" y tiene un rango de 0 a 15. Este es el valor almacenado en el archivo de configuración y controlado a través de la pantalla de volumen de sonido.

La segunda variable es interna al subsistema de sonido (snd_SfxVolume en el fragmento de código anterior). A diferencia de sfxVolume, tiene un rango de 0 a 127. El menú actualiza esta variable interna llamando a S_SetSfxVolume para informar al subsistema de sonido de los cambios de volumen. Antes del lanzamiento del código fuente, las dos variables se combinaron en una sola variable denominada snd_SfxVolume, con un rango de 0 a 15.

El resultado de esto es que el código de sonido publicado se comporta de manera diferente en el nivel 8. Si la configuración de volumen está al máximo (15), todos los efectos de sonido se reproducen al volumen máximo independientemente de la distancia del jugador. En segundo lugar, el efecto de volumen invertido se produce en cualquier ajuste de volumen por debajo de este.

Los restos de este cambio se encuentran dispersos a lo largo de la versión original. Lo siguiente es de m_menu.c :

S_SetSfxVolume(snd_SfxVolume /* *8 */);

El multiplicador por 8 comentado era necesario en Vanilla Doom para convertir del rango 0-15 al 0-127, pero después de fusionar las dos variables, se volvió inútil. S_SetSfxVolume en sí mismo todavía verifica que los valores estén en el rango de 0 a 127, aunque la función esencialmente dejó de tener sentido después del cambio.

Véase también[]

Advertisement