Remove legacy PSX way of generating visual fog by manipulating vertex colours. Instead

we rely on real OpenGL visual fog. Someone need to look at what scripts need in this
department - the difference between distance and depth fog was almost non-existent
before this change, and is none after, but we have lots of parameters we can easily tune
now from the scripts if we want.


git-svn-id: svn+ssh://svn.gna.org/svn/warzone/trunk@3044 4a71c877-e1ca-e34f-864e-861f7616d084
master
Per Inge Mathisen 2007-12-13 18:08:37 +00:00
parent e7f0dff4a4
commit 1a89fbb9bc
6 changed files with 34 additions and 208 deletions

View File

@ -329,7 +329,6 @@ UDWORD i;
void renderParticle( ATPART *psPart ) void renderParticle( ATPART *psPart )
{ {
Vector3i dv; Vector3i dv;
PIELIGHT brightness;
SDWORD centreX, centreZ; SDWORD centreX, centreZ;
SDWORD x, y, z, rx, rz; SDWORD x, y, z, rx, rz;
@ -353,8 +352,7 @@ void renderParticle( ATPART *psPart )
/* Draw it... */ /* Draw it... */
centreX = player.p.x + world_coord(visibleTiles.x / 2); centreX = player.p.x + world_coord(visibleTiles.x / 2);
centreZ = player.p.z + world_coord(visibleTiles.y / 2); centreZ = player.p.z + world_coord(visibleTiles.y / 2);
brightness = lightDoFogAndIllumination(WZCOL_WHITE, centreX - x, centreZ - z, NULL); pie_Draw3DShape(psPart->imd, 0, 0, WZCOL_WHITE, WZCOL_BLACK, pie_NO_BILINEAR, 0);
pie_Draw3DShape(psPart->imd, 0, 0, brightness, WZCOL_BLACK, pie_NO_BILINEAR, 0);
iV_MatrixEnd(); iV_MatrixEnd();
} }

View File

@ -839,7 +839,8 @@ void displayCompObj(BASE_OBJECT *psObj, BOOL bButton)
PROPULSION_STATS *psPropStats; PROPULSION_STATS *psPropStats;
SDWORD frame; SDWORD frame;
SDWORD pieFlag, iPieData; SDWORD pieFlag, iPieData;
PIELIGHT brightness, specular; PIELIGHT brightness;
const PIELIGHT specular = WZCOL_BLACK;
UDWORD colour; UDWORD colour;
UDWORD bDarkSide = FALSE; UDWORD bDarkSide = FALSE;
UBYTE i; UBYTE i;
@ -868,13 +869,12 @@ void displayCompObj(BASE_OBJECT *psObj, BOOL bButton)
if(!bButton) if(!bButton)
{ {
brightness = lightDoFogAndIllumination(pal_SetBrightness(psDroid->illumination), getCentreX() - psDroid->x,getCentreZ() - psDroid->y, &specular); brightness = pal_SetBrightness(psDroid->illumination);
pieFlag = pie_SHADOW; pieFlag = pie_SHADOW;
} }
else else
{ {
brightness = WZCOL_WHITE; brightness = WZCOL_WHITE;
specular = WZCOL_BLACK;
} }
/* We've got a z value here _and_ screen coords of origin */ /* We've got a z value here _and_ screen coords of origin */

View File

@ -634,7 +634,8 @@ static void drawTiles(iView *camera, iView *player)
TileIllum = pal_SetBrightness(psTile->illumination); TileIllum = pal_SetBrightness(psTile->illumination);
} }
tileScreenInfo[i][j].light = lightDoFogAndIllumination(TileIllum, rx - tileScreenInfo[i][j].pos.x, rz - world_coord(i - terrainMidY), &tileScreenInfo[i][j].specular); tileScreenInfo[i][j].light = TileIllum;
tileScreenInfo[i][j].specular = WZCOL_BLACK;
// Real fog of war - darken where we cannot see enemy units moving around // Real fog of war - darken where we cannot see enemy units moving around
if (bDisplaySensorRange && psTile && !psTile->activeSensor) if (bDisplaySensorRange && psTile && !psTile->activeSensor)
@ -700,8 +701,7 @@ static void drawTiles(iView *camera, iView *player)
tileScreenInfo[i][j].water_height = tileScreenInfo[i][j].pos.y; tileScreenInfo[i][j].water_height = tileScreenInfo[i][j].pos.y;
// Calc the light for modified y coord and ignore the specular component // Calc the light for modified y coord and ignore the specular component
tileScreenInfo[i][j].wlight = lightDoFogAndIllumination(TileIllum, rx - tileScreenInfo[i][j].pos.x, rz - world_coord(i - terrainMidY), NULL); tileScreenInfo[i][j].wlight = TileIllum;
tileScreenInfo[i][j].pos.y = tmp_y; tileScreenInfo[i][j].pos.y = tmp_y;
} }
else else
@ -1132,7 +1132,6 @@ void renderProjectile(PROJECTILE *psCurr)
WEAPON_STATS *psStats; WEAPON_STATS *psStats;
Vector3i dv; Vector3i dv;
iIMDShape *pIMD; iIMDShape *pIMD;
PIELIGHT brightness, specular;
SDWORD rx, rz; SDWORD rx, rz;
psStats = psCurr->psWStats; psStats = psCurr->psWStats;
@ -1183,15 +1182,14 @@ void renderProjectile(PROJECTILE *psCurr)
imdRot2.x = DEG(psCurr->pitch); imdRot2.x = DEG(psCurr->pitch);
iV_MatrixRotateX(imdRot2.x); iV_MatrixRotateX(imdRot2.x);
brightness = lightDoFogAndIllumination(WZCOL_WHITE, getCentreX() - psCurr->x, getCentreZ() - psCurr->y, &specular); if (psStats->weaponSubClass == WSC_ROCKET || psStats->weaponSubClass == WSC_MISSILE
if(psStats->weaponSubClass == WSC_ROCKET || psStats->weaponSubClass == WSC_MISSILE || || psStats->weaponSubClass == WSC_SLOWROCKET || psStats->weaponSubClass == WSC_SLOWMISSILE)
psStats->weaponSubClass == WSC_SLOWROCKET || psStats->weaponSubClass == WSC_SLOWMISSILE)
{ {
pie_Draw3DShape(pIMD, 0, 0, brightness, WZCOL_BLACK, pie_ADDITIVE, 164); pie_Draw3DShape(pIMD, 0, 0, WZCOL_WHITE, WZCOL_BLACK, pie_ADDITIVE, 164);
} }
else else
{ {
pie_Draw3DShape(pIMD, 0, 0, brightness, specular, pie_NO_BILINEAR, 0); pie_Draw3DShape(pIMD, 0, 0, WZCOL_WHITE, WZCOL_BLACK, pie_NO_BILINEAR, 0);
} }
iV_MatrixEnd(); iV_MatrixEnd();
@ -1226,7 +1224,7 @@ renderAnimComponent( const COMPONENT_OBJECT *psObj )
terrainMidY * TILE_UNITS - (psParentObj->y - player.p.z) terrainMidY * TILE_UNITS - (psParentObj->y - player.p.z)
}; };
SDWORD iPlayer; SDWORD iPlayer;
PIELIGHT brightness, specular; PIELIGHT brightness;
psParentObj->sDisplay.frameNumber = currentGameFrame; psParentObj->sDisplay.frameNumber = currentGameFrame;
@ -1305,9 +1303,7 @@ renderAnimComponent( const COMPONENT_OBJECT *psObj )
brightness = pal_SetBrightness(avGetObjLightLevel((BASE_OBJECT*)psParentObj, brightness.byte.r)); brightness = pal_SetBrightness(avGetObjLightLevel((BASE_OBJECT*)psParentObj, brightness.byte.r));
} }
brightness = lightDoFogAndIllumination(brightness, getCentreX() - posX, getCentreZ() - posY, &specular); pie_Draw3DShape(psObj->psShape, 0, iPlayer, brightness, WZCOL_BLACK, pie_NO_BILINEAR|pie_STATIC_SHADOW, 0);
pie_Draw3DShape(psObj->psShape, 0, iPlayer, brightness, specular, pie_NO_BILINEAR|pie_STATIC_SHADOW, 0);
/* clear stack */ /* clear stack */
iV_MatrixEnd(); iV_MatrixEnd();
@ -1606,7 +1602,7 @@ void renderFeature(FEATURE *psFeature)
{ {
UDWORD featX,featY; UDWORD featX,featY;
SDWORD rotation, rx, rz; SDWORD rotation, rx, rz;
PIELIGHT brightness, specular; PIELIGHT brightness;
Vector3i dv; Vector3i dv;
Vector3f *vecTemp; Vector3f *vecTemp;
BOOL bForceDraw = ( !getRevealStatus() && psFeature->psStats->visibleAtStart); BOOL bForceDraw = ( !getRevealStatus() && psFeature->psStats->visibleAtStart);
@ -1661,8 +1657,6 @@ void renderFeature(FEATURE *psFeature)
brightness = pal_SetBrightness(avGetObjLightLevel((BASE_OBJECT*)psFeature, brightness.byte.r)); brightness = pal_SetBrightness(avGetObjLightLevel((BASE_OBJECT*)psFeature, brightness.byte.r));
} }
brightness = lightDoFogAndIllumination(brightness, getCentreX() - featX, getCentreZ() - featY, &specular);
if (psFeature->psStats->subType == FEAT_BUILDING || psFeature->psStats->subType == FEAT_SKYSCRAPER if (psFeature->psStats->subType == FEAT_BUILDING || psFeature->psStats->subType == FEAT_SKYSCRAPER
|| psFeature->psStats->subType == FEAT_OIL_DRUM) || psFeature->psStats->subType == FEAT_OIL_DRUM)
{ {
@ -1675,12 +1669,12 @@ void renderFeature(FEATURE *psFeature)
vecTemp = psFeature->sDisplay.imd->points; vecTemp = psFeature->sDisplay.imd->points;
flattenImd(psFeature->sDisplay.imd, psFeature->x, psFeature->y, 0); flattenImd(psFeature->sDisplay.imd, psFeature->x, psFeature->y, 0);
/* currentGameFrame/2 set anim running - GJ hack */ /* currentGameFrame/2 set anim running - GJ hack */
pie_Draw3DShape(psFeature->sDisplay.imd, currentGameFrame/2, 0, brightness, specular, 0, 0); pie_Draw3DShape(psFeature->sDisplay.imd, currentGameFrame/2, 0, brightness, WZCOL_BLACK, 0, 0);
psFeature->sDisplay.imd->points = vecTemp; psFeature->sDisplay.imd->points = vecTemp;
} }
else else
{ {
pie_Draw3DShape(psFeature->sDisplay.imd, 0, 0, brightness, specular, shadowFlags,0); pie_Draw3DShape(psFeature->sDisplay.imd, 0, 0, brightness, WZCOL_BLACK, shadowFlags,0);
} }
{ {
@ -1705,7 +1699,6 @@ void renderProximityMsg(PROXIMITY_DISPLAY *psProxDisp)
VIEW_PROXIMITY *pViewProximity = NULL; VIEW_PROXIMITY *pViewProximity = NULL;
SDWORD x, y, r, rx, rz; SDWORD x, y, r, rx, rz;
iIMDShape *proxImd = NULL; iIMDShape *proxImd = NULL;
PIELIGHT brightness, specular;
//store the frame number for when deciding what has been clicked on //store the frame number for when deciding what has been clicked on
psProxDisp->frameNumber = currentGameFrame; psProxDisp->frameNumber = currentGameFrame;
@ -1742,7 +1735,6 @@ void renderProximityMsg(PROXIMITY_DISPLAY *psProxDisp)
{ {
ASSERT(!"unknown proximity display message type", "Buggered proximity message type"); ASSERT(!"unknown proximity display message type", "Buggered proximity message type");
} }
brightness = lightDoFogAndIllumination(WZCOL_WHITE, getCentreX() - msgX, getCentreZ() - msgY, &specular);
dv.x = (msgX - player.p.x) - terrainMidX*TILE_UNITS; dv.x = (msgX - player.p.x) - terrainMidX*TILE_UNITS;
dv.z = terrainMidY*TILE_UNITS - (msgY - player.p.z); dv.z = terrainMidY*TILE_UNITS - (msgY - player.p.z);
@ -1801,11 +1793,11 @@ void renderProximityMsg(PROXIMITY_DISPLAY *psProxDisp)
if(!gamePaused()) if(!gamePaused())
{ {
pie_Draw3DShape(proxImd, getTimeValueRange(1000,4), 0, brightness, specular, pie_ADDITIVE, 192); pie_Draw3DShape(proxImd, getTimeValueRange(1000,4), 0, WZCOL_WHITE, WZCOL_BLACK, pie_ADDITIVE, 192);
} }
else else
{ {
pie_Draw3DShape(proxImd, 0, 0, brightness, specular, pie_ADDITIVE, 192); pie_Draw3DShape(proxImd, 0, 0, WZCOL_WHITE, WZCOL_BLACK, pie_ADDITIVE, 192);
} }
//get the screen coords for determining when clicked on //get the screen coords for determining when clicked on
@ -1828,7 +1820,7 @@ void renderStructure(STRUCTURE *psStructure)
SDWORD playerFrame; SDWORD playerFrame;
SDWORD animFrame; SDWORD animFrame;
UDWORD nWeaponStat; UDWORD nWeaponStat;
PIELIGHT buildingBrightness, specular; PIELIGHT buildingBrightness, specular = WZCOL_BLACK;
Vector3i dv; Vector3i dv;
SDWORD i; SDWORD i;
iIMDShape *lImd = NULL, *imd = NULL; iIMDShape *lImd = NULL, *imd = NULL;
@ -1974,7 +1966,6 @@ void renderStructure(STRUCTURE *psStructure)
{ {
buildingBrightness = pal_SetBrightness(avGetObjLightLevel((BASE_OBJECT*)psStructure, buildingBrightness.byte.r)); buildingBrightness = pal_SetBrightness(avGetObjLightLevel((BASE_OBJECT*)psStructure, buildingBrightness.byte.r));
} }
buildingBrightness = lightDoFogAndIllumination(buildingBrightness, getCentreX() - psStructure->x, getCentreZ() - psStructure->y, &specular);
if (!defensive) if (!defensive)
{ {
@ -1983,7 +1974,7 @@ void renderStructure(STRUCTURE *psStructure)
if (baseImd != NULL) if (baseImd != NULL)
{ {
pie_Draw3DShape(baseImd, 0, 0, buildingBrightness, specular, 0,0); pie_Draw3DShape(baseImd, 0, 0, buildingBrightness, WZCOL_BLACK, 0,0);
} }
// override // override
@ -2264,7 +2255,6 @@ void renderDeliveryPoint(FLAG_POSITION *psPosition)
Vector3i dv; Vector3i dv;
SDWORD x, y, r, rx, rz; SDWORD x, y, r, rx, rz;
Vector3f *temp = NULL; Vector3f *temp = NULL;
PIELIGHT buildingBrightness, specular;
//store the frame number for when deciding what has been clicked on //store the frame number for when deciding what has been clicked on
psPosition->frameNumber = currentGameFrame; psPosition->frameNumber = currentGameFrame;
@ -2296,9 +2286,7 @@ void renderDeliveryPoint(FLAG_POSITION *psPosition)
pie_MatScale(50); // they are all big now so make this one smaller too pie_MatScale(50); // they are all big now so make this one smaller too
buildingBrightness = lightDoFogAndIllumination(WZCOL_WHITE, getCentreX() - psPosition->coords.x, getCentreZ() - psPosition->coords.y, &specular); pie_Draw3DShape(pAssemblyPointIMDs[psPosition->factoryType][psPosition->factoryInc], 0, 0, WZCOL_WHITE, WZCOL_BLACK, pie_NO_BILINEAR, 0);
pie_Draw3DShape(pAssemblyPointIMDs[psPosition->factoryType][psPosition->factoryInc], 0, 0, buildingBrightness, specular, pie_NO_BILINEAR, 0);
if(!psPosition->selected) if(!psPosition->selected)
{ {
@ -2317,7 +2305,7 @@ void renderDeliveryPoint(FLAG_POSITION *psPosition)
static BOOL renderWallSection(STRUCTURE *psStructure) static BOOL renderWallSection(STRUCTURE *psStructure)
{ {
SDWORD structX, structY, rx, rz; SDWORD structX, structY, rx, rz;
PIELIGHT brightness, specular, buildingBrightness; PIELIGHT brightness, specular = WZCOL_BLACK, buildingBrightness;
iIMDShape *imd; iIMDShape *imd;
SDWORD rotation; SDWORD rotation;
Vector3i dv; Vector3i dv;
@ -2331,8 +2319,6 @@ static BOOL renderWallSection(STRUCTURE *psStructure)
/* Get it's x and y coordinates so we don't have to deref. struct later */ /* Get it's x and y coordinates so we don't have to deref. struct later */
structX = psStructure->x; structX = psStructure->x;
structY = psStructure->y; structY = psStructure->y;
// centreX = ( player.p.x + world_coord(visibleTiles.x / 2) );
// centreZ = ( player.p.z + world_coord(visibleTiles.y / 2) );
buildingBrightness = pal_SetBrightness(200 - (100 - PERCENT(psStructure->body, structureBody(psStructure)))); buildingBrightness = pal_SetBrightness(200 - (100 - PERCENT(psStructure->body, structureBody(psStructure))));
if(psStructure->selected) if(psStructure->selected)
@ -2362,7 +2348,7 @@ static BOOL renderWallSection(STRUCTURE *psStructure)
buildingBrightness = pal_SetBrightness(avGetObjLightLevel((BASE_OBJECT*)psStructure, buildingBrightness.byte.r)); buildingBrightness = pal_SetBrightness(avGetObjLightLevel((BASE_OBJECT*)psStructure, buildingBrightness.byte.r));
} }
brightness = lightDoFogAndIllumination(buildingBrightness, getCentreX() - structX, getCentreZ() - structY, &specular); brightness = buildingBrightness;
/* /*
Right, now the tricky bit, we need to bugger about with the coordinates of the imd to make it Right, now the tricky bit, we need to bugger about with the coordinates of the imd to make it
@ -2482,7 +2468,6 @@ void renderShadow( DROID *psDroid, iIMDShape *psShadowIMD )
Vector3i dv; Vector3i dv;
Vector3f *pVecTemp; Vector3f *pVecTemp;
SDWORD shadowScale, rx, rz; SDWORD shadowScale, rx, rz;
PIELIGHT brightness, specular;
dv.x = (psDroid->x - player.p.x) - terrainMidX*TILE_UNITS; dv.x = (psDroid->x - player.p.x) - terrainMidX*TILE_UNITS;
if(psDroid->droidType == DROID_TRANSPORTER) if(psDroid->droidType == DROID_TRANSPORTER)
@ -2523,9 +2508,7 @@ void renderShadow( DROID *psDroid, iIMDShape *psShadowIMD )
pie_MatRotZ( DEG( psDroid->roll ) ); pie_MatRotZ( DEG( psDroid->roll ) );
} }
brightness = lightDoFogAndIllumination(WZCOL_WHITE, getCentreX() - psDroid->x, getCentreZ() - psDroid->y, &specular); pie_Draw3DShape(psShadowIMD, 0, 0, WZCOL_WHITE, WZCOL_BLACK, pie_TRANSLUCENT, 128);
pie_Draw3DShape(psShadowIMD, 0, 0, brightness, specular, pie_TRANSLUCENT, 128);
psShadowIMD->points = pVecTemp; psShadowIMD->points = pVecTemp;
iV_MatrixEnd(); iV_MatrixEnd();
@ -4625,7 +4608,7 @@ static void addConstructionLine(DROID *psDroid, STRUCTURE *psStructure)
SDWORD realY; SDWORD realY;
Vector3i null, vec; Vector3i null, vec;
SDWORD rx,rz; SDWORD rx,rz;
PIELIGHT colour, specular; PIELIGHT colour;
null.x = null.y = null.z = 0; null.x = null.y = null.z = 0;
each.x = psDroid->x; each.x = psDroid->x;
@ -4686,7 +4669,6 @@ static void addConstructionLine(DROID *psDroid, STRUCTURE *psStructure)
// set the colour // set the colour
colour = pal_SetBrightness(UBYTE_MAX); colour = pal_SetBrightness(UBYTE_MAX);
colour = lightDoFogAndIllumination(colour, getCentreX() - psDroid->x, getCentreZ() - psDroid->y, &specular);
if (psDroid->action == DACTION_DEMOLISH || psDroid->action == DACTION_CLEARWRECK) if (psDroid->action == DACTION_DEMOLISH || psDroid->action == DACTION_CLEARWRECK)
{ {

View File

@ -1600,22 +1600,15 @@ void renderEffect(EFFECT *psEffect)
/* drawing func for wapypoints . AJL. */ /* drawing func for wapypoints . AJL. */
void renderWaypointEffect(EFFECT *psEffect) void renderWaypointEffect(EFFECT *psEffect)
{ {
PIELIGHT brightness, specular;
positionEffect(psEffect); positionEffect(psEffect);
// set up lighting pie_Draw3DShape(psEffect->imd, 0, 0, WZCOL_WHITE, WZCOL_BLACK, 0, 0);
brightness = lightDoFogAndIllumination(WZCOL_WHITE, getCentreX() - MAKEINT(psEffect->position.x), getCentreZ() - MAKEINT(psEffect->position.z), &specular);
pie_Draw3DShape(psEffect->imd, 0, 0, brightness, specular, 0, 0);
iV_MatrixEnd(); iV_MatrixEnd();
} }
// ---------------------------------------------------------------------------------------- // ----------------------------------------------------------------------------------------
void renderFirework(EFFECT *psEffect) void renderFirework(EFFECT *psEffect)
{ {
PIELIGHT brightness, specular;
/* these don't get rendered */ /* these don't get rendered */
if(psEffect->type == FIREWORK_TYPE_LAUNCHER) if(psEffect->type == FIREWORK_TYPE_LAUNCHER)
{ {
@ -1627,10 +1620,8 @@ void renderFirework(EFFECT *psEffect)
iV_MatrixRotateY(-player.r.y); iV_MatrixRotateY(-player.r.y);
iV_MatrixRotateX(-player.r.x); iV_MatrixRotateX(-player.r.x);
brightness = lightDoFogAndIllumination(WZCOL_WHITE, getCentreX() - MAKEINT(psEffect->position.x), getCentreZ() - MAKEINT(psEffect->position.z), &specular);
pie_MatScale(psEffect->size); pie_MatScale(psEffect->size);
pie_Draw3DShape(psEffect->imd, psEffect->frameNumber, 0, brightness, WZCOL_BLACK, pie_ADDITIVE, EFFECT_EXPLOSION_ADDITIVE); pie_Draw3DShape(psEffect->imd, psEffect->frameNumber, 0, WZCOL_WHITE, WZCOL_BLACK, pie_ADDITIVE, EFFECT_EXPLOSION_ADDITIVE);
iV_MatrixEnd(); iV_MatrixEnd();
} }
@ -1638,18 +1629,13 @@ void renderFirework(EFFECT *psEffect)
/* drawing func for blood. */ /* drawing func for blood. */
void renderBloodEffect(EFFECT *psEffect) void renderBloodEffect(EFFECT *psEffect)
{ {
PIELIGHT brightness, specular;
positionEffect(psEffect); positionEffect(psEffect);
iV_MatrixRotateY(-player.r.y); iV_MatrixRotateY(-player.r.y);
iV_MatrixRotateX(-player.r.x); iV_MatrixRotateX(-player.r.x);
pie_MatScale(psEffect->size); pie_MatScale(psEffect->size);
// set up lighting pie_Draw3DShape(getImdFromIndex(MI_BLOOD), psEffect->frameNumber, 0, WZCOL_WHITE, WZCOL_BLACK, pie_TRANSLUCENT, EFFECT_BLOOD_TRANSPARENCY);
brightness = lightDoFogAndIllumination(WZCOL_WHITE, getCentreX() - MAKEINT(psEffect->position.x), getCentreZ() - MAKEINT(psEffect->position.z), &specular);
pie_Draw3DShape(getImdFromIndex(MI_BLOOD), psEffect->frameNumber, 0, brightness, specular, pie_TRANSLUCENT, EFFECT_BLOOD_TRANSPARENCY);
iV_MatrixEnd(); iV_MatrixEnd();
} }
@ -1658,7 +1644,6 @@ void renderDestructionEffect(EFFECT *psEffect)
{ {
float div; float div;
SDWORD percent; SDWORD percent;
PIELIGHT brightness,specular;
if(psEffect->type!=DESTRUCTION_TYPE_SKYSCRAPER) if(psEffect->type!=DESTRUCTION_TYPE_SKYSCRAPER)
{ {
@ -1674,16 +1659,13 @@ void renderDestructionEffect(EFFECT *psEffect)
percent = (SDWORD)(div*pie_RAISE_SCALE); percent = (SDWORD)(div*pie_RAISE_SCALE);
} }
//get fog value
brightness = lightDoFogAndIllumination(WZCOL_WHITE, getCentreX() - MAKEINT(psEffect->position.x), getCentreZ() - MAKEINT(psEffect->position.z), &specular);
if(!gamePaused()) if(!gamePaused())
{ {
iV_MatrixRotateX(SKY_SHIMMY); iV_MatrixRotateX(SKY_SHIMMY);
iV_MatrixRotateY(SKY_SHIMMY); iV_MatrixRotateY(SKY_SHIMMY);
iV_MatrixRotateZ(SKY_SHIMMY); iV_MatrixRotateZ(SKY_SHIMMY);
} }
pie_Draw3DShape(psEffect->imd, 0, 0, brightness, WZCOL_BLACK, pie_RAISE, percent); pie_Draw3DShape(psEffect->imd, 0, 0, WZCOL_WHITE, WZCOL_BLACK, pie_RAISE, percent);
iV_MatrixEnd(); iV_MatrixEnd();
} }
@ -1721,7 +1703,7 @@ UDWORD timeSlice;
void renderExplosionEffect(EFFECT *psEffect) void renderExplosionEffect(EFFECT *psEffect)
{ {
SDWORD percent; SDWORD percent;
PIELIGHT brightness, specular; const PIELIGHT brightness = WZCOL_WHITE;
if(psEffect->type == EXPLOSION_TYPE_LAND_LIGHT) if(psEffect->type == EXPLOSION_TYPE_LAND_LIGHT)
{ {
@ -1758,8 +1740,6 @@ void renderExplosionEffect(EFFECT *psEffect)
{ {
pie_MatScale(psEffect->size); pie_MatScale(psEffect->size);
} }
//get fog value
brightness = lightDoFogAndIllumination(WZCOL_WHITE, getCentreX() - MAKEINT(psEffect->position.x), getCentreZ() - MAKEINT(psEffect->position.z), &specular);
if(psEffect->type == EXPLOSION_TYPE_PLASMA) if(psEffect->type == EXPLOSION_TYPE_PLASMA)
{ {
@ -1780,7 +1760,6 @@ void renderExplosionEffect(EFFECT *psEffect)
// ---------------------------------------------------------------------------------------- // ----------------------------------------------------------------------------------------
void renderGravitonEffect(EFFECT *psEffect) void renderGravitonEffect(EFFECT *psEffect)
{ {
PIELIGHT brightness, specular;
positionEffect(psEffect); positionEffect(psEffect);
@ -1798,10 +1777,8 @@ void renderGravitonEffect(EFFECT *psEffect)
{ {
pie_MatScale(100); pie_MatScale(100);
} }
brightness = lightDoFogAndIllumination(WZCOL_WHITE, getCentreX() - MAKEINT(psEffect->position.x),
getCentreZ() - MAKEINT(psEffect->position.z), &specular);
pie_Draw3DShape(psEffect->imd, psEffect->frameNumber, 0, brightness, specular, 0, 0); pie_Draw3DShape(psEffect->imd, psEffect->frameNumber, 0, WZCOL_WHITE, WZCOL_BLACK, 0, 0);
/* Pop the matrix */ /* Pop the matrix */
iV_MatrixEnd(); iV_MatrixEnd();
@ -1817,7 +1794,6 @@ void renderConstructionEffect(EFFECT *psEffect)
SDWORD percent; SDWORD percent;
UDWORD translucency; UDWORD translucency;
UDWORD size; UDWORD size;
PIELIGHT brightness, specular;
/* No rotation about arbitrary axis */ /* No rotation about arbitrary axis */
null.x = null.y = null.z = 0; null.x = null.y = null.z = 0;
@ -1850,10 +1826,7 @@ void renderConstructionEffect(EFFECT *psEffect)
if(size>90) size = 90; if(size>90) size = 90;
pie_MatScale(size); pie_MatScale(size);
// set up lighting pie_Draw3DShape(psEffect->imd, psEffect->frameNumber, 0, WZCOL_WHITE, WZCOL_BLACK, pie_TRANSLUCENT, (UBYTE)(translucency));
brightness = lightDoFogAndIllumination(WZCOL_WHITE, getCentreX() - MAKEINT(psEffect->position.x), getCentreZ() - MAKEINT(psEffect->position.z), &specular);
pie_Draw3DShape(psEffect->imd, psEffect->frameNumber, 0, brightness, specular, pie_TRANSLUCENT, (UBYTE)(translucency));
/* Pop the matrix */ /* Pop the matrix */
iV_MatrixEnd(); iV_MatrixEnd();
@ -1868,7 +1841,8 @@ void renderSmokeEffect(EFFECT *psEffect)
{ {
UDWORD percent; UDWORD percent;
UDWORD transparency = 0; UDWORD transparency = 0;
PIELIGHT brightness, specular; const PIELIGHT brightness = WZCOL_WHITE;
const PIELIGHT specular = WZCOL_BLACK;
positionEffect(psEffect); positionEffect(psEffect);
@ -1904,9 +1878,6 @@ void renderSmokeEffect(EFFECT *psEffect)
#endif #endif
} }
// set up lighting
brightness = lightDoFogAndIllumination(WZCOL_WHITE, getCentreX() - MAKEINT(psEffect->position.x), getCentreZ() - MAKEINT(psEffect->position.z), &specular);
transparency = (transparency * 3) / 2; //JPS smoke strength increased for d3d 12 may 99 transparency = (transparency * 3) / 2; //JPS smoke strength increased for d3d 12 may 99
/* Make imds be transparent on 3dfx */ /* Make imds be transparent on 3dfx */

View File

@ -513,130 +513,6 @@ float fraction,adjust;
psDroid->illumination = (UBYTE)retVal; psDroid->illumination = (UBYTE)retVal;
} }
PIELIGHT lightDoFogAndIllumination(PIELIGHT brightness, SDWORD dx, SDWORD dz, PIELIGHT *pSpecular)
{
SDWORD umbraRadius; // Distance to start of light falloff
SDWORD penumbraRadius; // radius of area of obscurity
SDWORD umbra;
SDWORD distance = sqrtf(dx*dx + dz*dz);
SDWORD cosA,sinA;
PIELIGHT lighting, specular, fogColour;
SDWORD depth = 0;
SDWORD colour;
SDWORD fog = 0;
penumbraRadius = world_coord(visibleTiles.x / 2);
umbraRadius = penumbraRadius - UMBRA_RADIUS;
if(distance < umbraRadius)
{
umbra = 255;
}
else if (distance > penumbraRadius)
{
umbra = 0;
}
else
{
umbra = 255 - (((distance-umbraRadius)*255)/(UMBRA_RADIUS));
}
if ((distance) < 32)
{
depth = 1;
}
if ((fogStatus & FOG_DISTANCE) || (fogStatus & FOG_BACKGROUND))
{
//add fog
if (pie_GetFogEnabled())
{
cosA = COS(player.r.y);
sinA = SIN(player.r.y);
depth = sinA * dx + cosA * dz;
depth >>= FP12_SHIFT;
depth += FOG_START;
depth /= FOG_RATE;
}
}
if (fogStatus & FOG_DISTANCE)
{
//add fog
if (pie_GetFogEnabled())
{
if (!(fogStatus & FOG_BACKGROUND))//black penumbra so fade fog effect
{
fog = depth - (255 - umbra);
}
else
{
fog = depth;
}
if (fog < 0)
{
fog = 0;
}
else if (fog > 255)
{
fog = 255;
}
}
}
if ((fogStatus & FOG_BACKGROUND) && (pie_GetFogEnabled()))
{
//fog the umbra but only for distant points
if (depth > (float)-0.1)
{
fog = fog + (255 - umbra);
if (fog > 255)
{
fog = 255;
}
if (fog < 0)
{
fog = 0;
}
}
}
else
{
brightness = pal_SetBrightness(pie_ByteScale(brightness.byte.r, (UBYTE)umbra));
}
if (fog == 0)
{
if (pSpecular != NULL)
{
*pSpecular = WZCOL_BLACK;
}
lighting = brightness;
}
else
{
if (pSpecular != NULL)
{
fogColour = pie_GetFogColour();
specular.byte.a = fog;
specular.byte.r = pie_ByteScale(fog, fogColour.byte.r);
specular.byte.g = pie_ByteScale(fog, fogColour.byte.g);
specular.byte.b = pie_ByteScale(fog, fogColour.byte.b);
*pSpecular = specular;
}
//calculate new brightness
colour = 256 - fog;
brightness = pal_SetBrightness(pie_ByteScale(colour, brightness.byte.r));
lighting = brightness;
}
return lighting;
}
void doBuildingLights( void ) void doBuildingLights( void )
{ {
STRUCTURE *psStructure; STRUCTURE *psStructure;

View File

@ -53,7 +53,6 @@ extern void lightValueForTile(UDWORD tileX, UDWORD tileY);
extern void calcTileIllum(UDWORD tileX, UDWORD tileY); extern void calcTileIllum(UDWORD tileX, UDWORD tileY);
extern void doBuildingLights( void ); extern void doBuildingLights( void );
extern void UpdateFogDistance(float distance); extern void UpdateFogDistance(float distance);
extern PIELIGHT lightDoFogAndIllumination(PIELIGHT brightness, SDWORD dx, SDWORD dz, PIELIGHT *pSpecular);
extern void calcDroidIllumination(DROID *psDroid); extern void calcDroidIllumination(DROID *psDroid);
//darkens down the tiles that are outside the scroll limits //darkens down the tiles that are outside the scroll limits
extern void setScrollLimitLighting(void); extern void setScrollLimitLighting(void);