Doom Wiki
Advertisement
Doom Wiki


En Hexen, se supone que el sector tipo 200 se emplea para que dicho sector utilice el cielo secundario definido en MAPINFO en lugar del cielo primario. Sin embargo, esto no funciona en techos debido a un error en la función R_Subsector() , que siempre usa un valor de 0 en lugar del sector especial para techos.

Aspectos técnicos[]

La función R_DrawPlanes(), en R_PLANE.C, contiene código para cambiar qué textura de cielo usar dependiendo de si se usa el tipo de sector 200: if(pl->special == 200)

	{ // Use sky 2
		offset = Sky2ColumnOffset>>16;
		skyTexture = texturetranslation[Sky2Texture];
	}
	else
	{ // Use sky 1
		offset = Sky1ColumnOffset>>16;
		skyTexture = texturetranslation[Sky1Texture];
	}

Sin embargo, esta verificación no se realiza directamente en el sector al que R_DrawPlanes() no tiene acceso, sino en el visplane. El visplane lo crea (si es necesario) mediante R_FindPlane(), también en R_PLANE.C, que es llamado por R_Subsector() en R_BSP.C. Es en esta función donde se encuentra el problema:

if(frontsector->floorheight < viewz)
{
	floorplane = R_FindPlane(frontsector->floorheight,
		frontsector->floorpic, frontsector->lightlevel,
		frontsector->special);
}
else
{
	floorplane = NULL;
}

if(frontsector->ceilingheight > viewz
	|| frontsector->ceilingpic == skyflatnum)
{
	ceilingplane = R_FindPlane(frontsector->ceilingheight,
		frontsector->ceilingpic, frontsector->lightlevel, 0);
}
else
{
	ceilingplane = NULL;
}

Como puede verse, para los pisos el último parámetro enviado a R_FindPlane() es el tipo especial del sector; pero para los techos, siempre es el valor 0. Como resultado, el código va a usar cielo 2 en lugar de cielo 1 y nunca se puede alcanzar al dibujar un techo de cielo, pero puede funcionar al dibujar un piso de cielo.

Enlaces externos[]

Advertisement