FANDOM

1.062 Páginas

Agujero de bala

Ciertas paredes exteriores no muestran impactos de bala cuando se les dispara.

Normalmente, como resultado de disparar contra las paredes en Doom, aparecen "agujeros" en ellas sobre la textura de la pared. Sin embargo, debido a un error en el juego, éstos pueden no aparecer en áreas al aire libre cuando se dispara contra ciertas paredes.

Aspectos técnicos

El error se produce debido a un error lógico en el código para el manejo de los cielos.

En Doom, si una linedef cruza entre dos sectores con diferentes alturas de techo y no tiene definida la textura superior que se mostrará en el espacio entre esos sectores, la textura del techo del sector inferior parece "sangrar" en el espacio vacío. Esto se utiliza deliberadamente como un efecto en las zonas al aire libre donde se utiliza una textura de cielo especial (F_SKY1) para la textura del techo. Esto permite que la textura del cielo más allá de las paredes exteriores bajas se vea como un cielo de verdad, en lugar de un fondo de pantalla de cielo.

El motor de Doom contiene código explícito para hacer frente a este caso.

Los cohetes lanzados contra estas "paredes de corte de cielo" no explotan, sino que desaparecen a lo lejos; pero si los disparos contra las paredes se hicieron a quemarropa los cohetes estallan en el modo normal y el jugador recibe daño por la explosión. Del mismo modo, dispararle a esas paredes con un arma hitscan no produce agujeros de bala, a menos que el tirador esté justo en frente de la pared.

Es por esto que se produce el error de los agujeros de bala que no aparecen. Aunque se realiza una comprobación para determinar si el sector posterior de la linedef tiene el cielo por techo, no se comprueba que en realidad sea la textura superior la que se ha visto afectada.

De PTR_ShootTraverse en p_map.c:

  if (li->frontsector->ceilingpic == skyflatnum)
  {
      // don't shoot the sky!
      if (z > li->frontsector->ceilingheight)
          return false;
      
      // it's a sky hack wall
      if  (li->backsector && li->backsector->ceilingpic == skyflatnum)
          return false;           
  }

  // Spawn bullet puffs.
  P_SpawnPuff (x,y,z);


El error se puede solucionar a través de la adición de una condición adicional para la prueba de "sky hack wall":

  li->backsector->ceilingheight < z

¡Interferencia de bloqueo de anuncios detectada!


Wikia es un sitio libre de uso que hace dinero de la publicidad. Contamos con una experiencia modificada para los visitantes que utilizan el bloqueo de anuncios

Wikia no es accesible si se han hecho aún más modificaciones. Si se quita el bloqueador de anuncios personalizado, la página cargará como se esperaba.

También en FANDOM

Wiki al azar