More cleanup

git-svn-id: svn+ssh://svn.gna.org/svn/warzone/trunk@1679 4a71c877-e1ca-e34f-864e-861f7616d084
master
Dennis Schridde 2007-05-21 18:57:11 +00:00
parent 504126bda9
commit 49f8259226
5 changed files with 100 additions and 104 deletions

View File

@ -113,8 +113,8 @@ typedef struct iIMDShape {
Sint32 oradius, sradius, radius, visRadius, xmin, xmax, ymin, ymax, zmin, zmax;
Vector3i ocen;
UWORD numFrames;
UWORD animInterval;
UWORD numFrames;
UWORD animInterval;
int npoints;
int npolys; // After BSP this number is not updated - it stays the number of pre-bsp polys
int nconnectors; // After BSP this number is not updated - it stays the number of pre-bsp polys

View File

@ -307,50 +307,59 @@ static transluscent_shape_t* tshapes = NULL;
static unsigned int tshapes_size = 0;
static unsigned int nb_tshapes = 0;
static void pie_Draw3DShape2(iIMDShape *shape, int frame, PIELIGHT colour, PIELIGHT specular,
int pieFlag, int pieFlagData)
static void pie_Draw3DShape2(iIMDShape *shape, int frame, PIELIGHT colour, PIELIGHT specular, int pieFlag, int pieFlagData)
{
Sint32 tempY;
Sint32 tempY;
int i, n;
Vector3i *pVertices;
Vector3f *pPixels;
iIMDPoly *pPolys;
PIEPOLY piePoly;
VERTEXID *index;
BOOL light = lighting;
Vector3i *pVertices;
Vector3f *pPixels;
iIMDPoly *pPolys;
PIEPOLY piePoly;
VERTEXID *index;
BOOL light = lighting;
/* Set tranlucency */
if (pieFlag & pie_ADDITIVE) { //Assume also translucent
if (pieFlag & pie_ADDITIVE)
{ //Assume also translucent
pie_SetFogStatus(FALSE);
pie_SetRendMode(REND_ADDITIVE_TEX);
colour.byte.a = (UBYTE)pieFlagData;
pie_SetBilinear(TRUE);
light = FALSE;
} else if (pieFlag & pie_TRANSLUCENT) {
}
else if (pieFlag & pie_TRANSLUCENT)
{
pie_SetFogStatus(FALSE);
pie_SetRendMode(REND_ALPHA_TEX);
colour.byte.a = (UBYTE)pieFlagData;
pie_SetBilinear(FALSE);//never bilinear with constant alpha, gives black edges
light = FALSE;
} else {
}
else
{
if (pieFlag & pie_BUTTON)
{
pie_SetFogStatus(FALSE);
pie_SetDepthBufferStatus(DEPTH_CMP_LEQ_WRT_ON);
} else {
}
else
{
pie_SetFogStatus(TRUE);
}
pie_SetRendMode(REND_GOURAUD_TEX);
//if hardware fog then alpha is set else unused in decal mode
//colour.byte.a = MAX_UB_LIGHT;
if (pieFlag & pie_NO_BILINEAR) {
if (pieFlag & pie_NO_BILINEAR)
{
pie_SetBilinear(FALSE);
} else {
}
else
{
pie_SetBilinear(TRUE);
}
}
if (pieFlag & pie_RAISE) {
if (pieFlag & pie_RAISE)
{
pieFlagData = (shape->ymax * (pie_RAISE_SCALE - pieFlagData))/pie_RAISE_SCALE;
}
@ -358,25 +367,24 @@ static void pie_Draw3DShape2(iIMDShape *shape, int frame, PIELIGHT colour, PIELI
//now draw the shape
//rotate and project points from shape->points to scrPoints
pVertices = shape->points;
pPixels = &scrPoints[0];
//--
for (i=0; i<shape->npoints; i++, pVertices++, pPixels++) {
for (i = 0, pVertices = shape->points, pPixels = scrPoints;
i < shape->npoints;
i++, pVertices++, pPixels++)
{
tempY = pVertices->y;
if (pieFlag & pie_RAISE)
{
tempY = pVertices->y - pieFlagData;
if (tempY < 0) tempY = 0;
if (tempY < 0)
tempY = 0;
}
else if (pieFlag & pie_HEIGHT_SCALED)
{
if(pVertices->y>0)
if(pVertices->y > 0)
{
tempY = (pVertices->y * pieFlagData)/pie_RAISE_SCALE;
tempY = (pVertices->y * pieFlagData) / pie_RAISE_SCALE;
}
//if (tempY < 0) tempY = 0;
}
pPixels->x = pVertices->x;
pPixels->y = tempY;
@ -424,7 +432,7 @@ static void pie_Draw3DShape2(iIMDShape *shape, int frame, PIELIGHT colour, PIELI
/// returns true if the edges are adjacent
static int compare_edge (EDGE *A, EDGE *B, Vector3i *pVertices )
static int compare_edge (EDGE *A, EDGE *B, const Vector3i *pVertices )
{
if(A->from == B->to)
{
@ -451,13 +459,11 @@ static int compare_edge (EDGE *A, EDGE *B, Vector3i *pVertices )
/// Makes sure only silhouette edges are present
static void addToEdgeList(int a, int b, EDGE *edgelist, int *edge_count, Vector3i *pVertices)
{
EDGE newEdge;
EDGE newEdge = {a, b};
int i;
BOOL foundMatching = FALSE;
newEdge.from = a;
newEdge.to = b;
for(i=0;i<*edge_count;i++)
for(i = 0; i < *edge_count; i++)
{
if(edgelist[i].from < 0)
{
@ -496,9 +502,9 @@ static inline float scale_y(float y, int flag, int flag_data)
/// Draw the shadow for a shape
static void pie_DrawShadow(iIMDShape *shape, int flag, int flag_data, Vector3f* light)
{
int i,j, n;
Vector3i *pVertices;
iIMDPoly *pPolys;
int i, j, n;
Vector3i *pVertices;
iIMDPoly *pPolys;
int edge_count = 0;
static EDGE *edgelist = NULL;
static int edgelistsize = 256;
@ -517,11 +523,11 @@ static void pie_DrawShadow(iIMDShape *shape, int flag, int flag_data, Vector3f*
}
else
{
pPolys = shape->polys;
for (i = 0; i < shape->npolys; ++i, ++pPolys) {
for (i = 0, pPolys = shape->polys; i < shape->npolys; ++i, ++pPolys) {
Vector3f p[3], v[2], normal;
VERTEXID current, first;
for(j=0;j<3;j++)
for(j = 0; j < 3; j++)
{
current = pPolys->pindex[j];
Vector3f_Set(&p[j], pVertices[current].x, scale_y(pVertices[current].y, flag, flag_data), pVertices[current].z);
@ -549,7 +555,7 @@ static void pie_DrawShadow(iIMDShape *shape, int flag, int flag_data, Vector3f*
}
}
// back to the first
addToEdgeList(pPolys->pindex[ pPolys->npnts-1 ], first, edgelist, &edge_count, pVertices);
addToEdgeList(pPolys->pindex[pPolys->npnts-1], first, edgelist, &edge_count, pVertices);
}
}
//debug(LOG_WARNING, "we have %i edges", edge_count);
@ -558,10 +564,9 @@ static void pie_DrawShadow(iIMDShape *shape, int flag, int flag_data, Vector3f*
if(flag & pie_STATIC_SHADOW)
{
// first compact the current edgelist
j = 0;
for(i=0;i<edge_count;i++)
for(i = 0, j = 0; i < edge_count; i++)
{
if(edgelist[i].from<0)
if(edgelist[i].from < 0)
{
continue;
}
@ -570,9 +575,9 @@ static void pie_DrawShadow(iIMDShape *shape, int flag, int flag_data, Vector3f*
}
edge_count = j;
// then store it in the imd
shape->shadowEdgeList = malloc(sizeof(EDGE)*edge_count);
memcpy(shape->shadowEdgeList, edgelist, sizeof(EDGE)*edge_count);
shape->nShadowEdges = edge_count;
shape->shadowEdgeList = malloc(sizeof(EDGE) * shape->nShadowEdges);
memcpy(shape->shadowEdgeList, edgelist, sizeof(EDGE) * shape->nShadowEdges);
}
}
@ -580,13 +585,11 @@ static void pie_DrawShadow(iIMDShape *shape, int flag, int flag_data, Vector3f*
glBegin(GL_QUADS);
for(i=0;i<edge_count;i++)
{
int a,b;
a = drawlist[i].from;
int a = drawlist[i].from, b = drawlist[i].to;
if(a < 0)
{
continue;
}
b = drawlist[i].to;
glVertex3f(pVertices[b].x, scale_y(pVertices[b].y, flag, flag_data), pVertices[b].z);
glVertex3f(pVertices[b].x+light->x, scale_y(pVertices[b].y, flag, flag_data)+light->y, pVertices[b].z+light->z);
@ -599,13 +602,16 @@ static void pie_DrawShadow(iIMDShape *shape, int flag, int flag_data, Vector3f*
glDisable(GL_DEPTH_TEST);
glColorMask(GL_TRUE, GL_TRUE, GL_TRUE, GL_TRUE);
glColor4ub(0xFF,0,0,0xFF);
glColor4ub(0xFF, 0, 0, 0xFF);
glBegin(GL_LINES);
for(i=0;i<edge_count;i++)
for(i = 0; i < edge_count; i++)
{
int a = drawlist[i].from;
if(a<0) continue;
int b = drawlist[i].to;
int a = drawlist[i].from, b = drawlist[i].to;
if(a < 0)
{
continue;
}
glVertex3f(pVertices[b].x, scale_y(pVertices[b].y, flag, flag_data), pVertices[b].z);
glVertex3f(pVertices[a].x, scale_y(pVertices[a].y, flag, flag_data), pVertices[a].z);
}

View File

@ -81,6 +81,15 @@ static inline BOOL Vector3i_compare(const Vector3i *a, const Vector3i *b)
}
/*!
* returns true if both vectors are equal
*/
static inline BOOL Vector3f_compare(const Vector3f *a, const Vector3f *b)
{
return a->x == b->x && a->y == b->y && a->z == b->z;
}
//*************************************************************************

View File

@ -248,15 +248,14 @@ static BOOL mouseLocated = TRUE;
/* The box used for multiple selection - present screen coordinates */
/* The game palette */
iPalette gamePal;
UDWORD currentGameFrame;
static UDWORD numTiles = 0;
static SDWORD tileZ = 8000;
static QUAD dragQuad;
//UDWORD averageHeight;
iPalette gamePal;
UDWORD currentGameFrame;
static UDWORD numTiles = 0;
static SDWORD tileZ = 8000;
static QUAD dragQuad;
/* temporary buffer used for flattening IMDs */
static Vector3i alteredPoints[iV_IMD_MAX_POINTS];
static Vector3i alteredPoints[iV_IMD_MAX_POINTS];
//number of tiles visible
UDWORD visibleXTiles;
@ -1726,7 +1725,7 @@ void renderFeature(FEATURE *psFeature)
UDWORD brightness, specular;
Vector3i dv;
Vector3i *vecTemp;
BOOL bForceDraw = ( !getRevealStatus() && psFeature->psStats->visibleAtStart);
BOOL bForceDraw = ( !getRevealStatus() && psFeature->psStats->visibleAtStart);
int shadowFlags = 0;
if (psFeature->visible[selectedPlayer] || godMode || demoGetStatus() || bForceDraw)
@ -1763,12 +1762,8 @@ void renderFeature(FEATURE *psFeature)
iV_MatrixRotateY(-rotation);
// centreX = ( player.p.x + ((visibleXTiles/2)<<TILE_SHIFT) );
// centreZ = ( player.p.z + ((visibleYTiles/2)<<TILE_SHIFT) );
brightness = 200; //? HUH?
// if(psFeature->sDisplay.imd->ymax>300)
if(psFeature->psStats->subType == FEAT_SKYSCRAPER)
{
objectShimmy((BASE_OBJECT*)psFeature);
@ -1783,7 +1778,7 @@ void renderFeature(FEATURE *psFeature)
brightness = avGetObjLightLevel((BASE_OBJECT*)psFeature,brightness);
}
brightness = lightDoFogAndIllumination(brightness,getCentreX()-featX,getCentreZ()-featY, &specular);
brightness = lightDoFogAndIllumination(brightness, getCentreX() - featX, getCentreZ() - featY, &specular);
if(psFeature->psStats->subType == FEAT_BUILDING ||
psFeature->psStats->subType == FEAT_SKYSCRAPER ||
psFeature->psStats->subType == FEAT_OIL_DRUM)
@ -1794,7 +1789,7 @@ void renderFeature(FEATURE *psFeature)
if(psFeature->psStats->subType == FEAT_OIL_RESOURCE)
{
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 */
pie_Draw3DShape(psFeature->sDisplay.imd, currentGameFrame/2, 0, brightness, specular, 0, 0);
psFeature->sDisplay.imd->points = vecTemp;
@ -2065,7 +2060,7 @@ void renderStructure(STRUCTURE *psStructure)
rz = player.p.z & (TILE_UNITS-1);
/* Translate */
iV_TRANSLATE(rx,0,-rz);
iV_TRANSLATE(rx, 0, -rz);
/* OK - here is where we establish which IMD to draw for the building - luckily static objects,
* buildings in other words are NOT made up of components - much quicker! */
@ -2107,7 +2102,7 @@ void renderStructure(STRUCTURE *psStructure)
/* Draw the building's base first */
baseImd = psStructure->pStructureType->pBaseIMD;
if(baseImd!=NULL)
if(baseImd != NULL)
{
pie_Draw3DShape(baseImd, 0, 0, buildingBrightness, specular, 0,0);
}
@ -2120,16 +2115,16 @@ void renderStructure(STRUCTURE *psStructure)
imd = psStructure->sDisplay.imd;
if(imd!=NULL && bHitByElectronic)
if(imd != NULL && bHitByElectronic)
{
// Get a copy of the points
memcpy(alteredPoints,imd->points,imd->npoints*sizeof(Vector3i));
memcpy(alteredPoints, imd->points, imd->npoints * sizeof(Vector3i));
for(i=0; i<imd->npoints; i++)
{
SDWORD yVar = (10 - rand() % 20);
alteredPoints[i].x +=yVar - (rand()%2*yVar);
alteredPoints[i].z +=yVar - (rand()%2*yVar);
alteredPoints[i].x += yVar - (rand()%2*yVar);
alteredPoints[i].z += yVar - (rand()%2*yVar);
}
temp = imd->points;
imd->points = alteredPoints;
@ -2467,7 +2462,6 @@ void renderDeliveryPoint(FLAG_POSITION *psPosition)
Vector3i dv;
SDWORD x, y, r;
Vector3i *temp = NULL;
// SDWORD centreX, centreZ;
SDWORD buildingBrightness, specular;
//store the frame number for when deciding what has been clicked on
psPosition->frameNumber = currentGameFrame;
@ -2489,7 +2483,6 @@ void renderDeliveryPoint(FLAG_POSITION *psPosition)
iV_TRANSLATE(rx,0,-rz);
//quick check for invalid data
//ASSERT( psPosition->factoryType < NUM_FACTORY_TYPES &&
ASSERT( psPosition->factoryType < NUM_FLAG_TYPES && psPosition->factoryInc < MAX_FACTORY, "Invalid assembly point" );
if(!psPosition->selected)
@ -2499,20 +2492,12 @@ void renderDeliveryPoint(FLAG_POSITION *psPosition)
psPosition->coords.x, psPosition->coords.y,0);
}
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
// centreX = ( player.p.x + ((visibleXTiles/2)<<TILE_SHIFT) );
// centreZ = ( player.p.z + ((visibleYTiles/2)<<TILE_SHIFT) );
buildingBrightness = lightDoFogAndIllumination(pie_MAX_BRIGHT_LEVEL,
getCentreX() - psPosition->coords.x, getCentreZ() - psPosition->coords.y, (UDWORD*)&specular);
buildingBrightness = pie_MAX_BRIGHT_LEVEL;
buildingBrightness = lightDoFogAndIllumination((UBYTE)buildingBrightness,
getCentreX()-psPosition->coords.x,getCentreZ()-psPosition->coords.y, (UDWORD*)&specular);
// pie_Draw3DShape(pAssemblyPointIMDs[psPosition->factoryInc], 0, 0,
// buildingBrightness, 0, pie_TRANSLUCENT | pie_NO_BILINEAR, EFFECT_DELIVERY_POINT_TRANSPARENCY);
pie_Draw3DShape(pAssemblyPointIMDs[psPosition->factoryType][psPosition->factoryInc],
0, 0, buildingBrightness, specular, pie_NO_BILINEAR, 0);
pie_Draw3DShape(pAssemblyPointIMDs[psPosition->factoryType][psPosition->factoryInc], 0, 0, buildingBrightness, specular, pie_NO_BILINEAR, 0);
if(!psPosition->selected)
{
@ -2589,7 +2574,7 @@ static BOOL renderWallSection(STRUCTURE *psStructure)
fit tightly to the ground and to neighbours.
*/
imd = psStructure->pStructureType->pBaseIMD;
if(imd!=NULL)
if(imd != NULL)
{
UDWORD centreHeight;
@ -2628,8 +2613,8 @@ static BOOL renderWallSection(STRUCTURE *psStructure)
rotation = DEG( (int)psStructure->direction );
iV_MatrixRotateY(-rotation);
// objectShimmy((BASE_OBJECT*)psStructure);
if(imd!=NULL)
if(imd != NULL)
{
// Make the imd pointer to the vertex list point to ours
temp = imd->points;
@ -2703,8 +2688,6 @@ void renderShadow( DROID *psDroid, iIMDShape *psShadowIMD )
Vector3i *pVecTemp;
SDWORD shadowScale;
UDWORD brightness, specular;
// SDWORD centreX, centreZ;
dv.x = (psDroid->x - player.p.x) - terrainMidX*TILE_UNITS;
if(psDroid->droidType == DROID_TRANSPORTER)
@ -4142,11 +4125,10 @@ static iIMDShape *flattenImd(iIMDShape *imd, UDWORD structX, UDWORD structY, UDW
{
UDWORD i, centreHeight;
ASSERT( imd->npoints < iV_IMD_MAX_POINTS,
"flattenImd: too many points in the PIE to flatten it" );
ASSERT( imd->npoints < iV_IMD_MAX_POINTS, "flattenImd: too many points in the PIE to flatten it" );
/* Get a copy of the points */
memcpy(alteredPoints,imd->points,imd->npoints*sizeof(Vector3i));
memcpy(alteredPoints, imd->points, imd->npoints * sizeof(Vector3i));
/* Get the height of the centre point for reference */
centreHeight = map_Height(structX,structY);
@ -4161,7 +4143,7 @@ static iIMDShape *flattenImd(iIMDShape *imd, UDWORD structX, UDWORD structY, UDW
switch(direction)
{
case 0:
for(i=0; i<(UDWORD)imd->npoints; i++)
for(i = 0; i < (UDWORD)imd->npoints; i++)
{
if (abs(alteredPoints[i].x) >= 63 || abs(alteredPoints[i].z) >= 63)
{

View File

@ -18,7 +18,7 @@
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
*/
/*!
* \file Structure.c
* \file structure.c
*
* Store Structure stats.
* WARNING!!!!!!
@ -3954,8 +3954,8 @@ static BOOL canSmoke(STRUCTURE *psStruct)
/* The main update routine for all Structures */
void structureUpdate(STRUCTURE *psBuilding)
{
UDWORD widthScatter,breadthScatter;
UDWORD percentDamage, emissionInterval, iPointsToAdd, iPointsRequired;
UDWORD widthScatter,breadthScatter;
UDWORD percentDamage, emissionInterval, iPointsToAdd, iPointsRequired;
Vector3i dv;
ASSERT( psBuilding != NULL,
@ -3975,8 +3975,6 @@ void structureUpdate(STRUCTURE *psBuilding)
}
}
//--
/* Only add smoke if they're visible and they can 'burn' */
if(psBuilding->visible[selectedPlayer] && canSmoke(psBuilding))
{
@ -4073,7 +4071,8 @@ void structureUpdate(STRUCTURE *psBuilding)
//add the blue flashing effect for multiPlayer
if(bMultiPlayer && ONEINTEN)
{
Vector3i position, *point;
Vector3i position;
Vector3i *point;
SDWORD realY;
UDWORD pointIndex;
@ -4085,8 +4084,8 @@ void structureUpdate(STRUCTURE *psBuilding)
position.z = psBuilding->y - point->z;
effectSetSize(30);
addEffect(&position,EFFECT_EXPLOSION,EXPLOSION_TYPE_SPECIFIED,TRUE,
getImdFromIndex(MI_PLASMA),0);
addEffect(&position, EFFECT_EXPLOSION, EXPLOSION_TYPE_SPECIFIED, TRUE,
getImdFromIndex(MI_PLASMA), 0);
}
if (iPointsToAdd)