// ------------------------------------------------------------------------------------ void preProcessVisibility( void ) { UDWORD i,j; MAPTILE *psTile; STRUCTURE *psStruct; //FEATURE *psFeature; for(i=0; i<mapWidth;i++) { for(j=0; j<mapHeight; j++) { psTile = mapTile(i,j); if(TEST_TILE_VISIBLE(selectedPlayer,psTile)) { psTile->bMaxed = TRUE; psTile->level = psTile->illumination; //can't have this cos when load up a save game where a structure has been built by the //enemy in an area that has been seen before it flags the structure as visible! /*if(TILE_HAS_STRUCTURE(psTile)) { psStruct = getTileStructure(i,j); if (psStruct) { psStruct->visible[selectedPlayer] = UBYTE_MAX; } else { ASSERT((FALSE, "preProcessVisibility: should be a structure at %d, %d", i, j)); } }*/ /* if(TILE_HAS_FEATURE(psTile)) { psFeature = getTileFeature(i,j); psFeature->visible[selectedPlayer] = UBYTE_MAX; } */ } else { psTile->level = UBYTE_MAX; psTile->bMaxed = FALSE; } } } }
// ------------------------------------------------------------------------------------ void preProcessVisibility( void ) { UDWORD i,j; MAPTILE *psTile; for(i=0; i<mapWidth;i++) { for(j=0; j<mapHeight; j++) { psTile = mapTile(i,j); psTile->level = 0; if (!bRevealActive || TEST_TILE_VISIBLE(selectedPlayer, psTile)) { psTile->level = psTile->illumination; } } } }
static PIELIGHT appliedRadarColour(RADAR_DRAW_MODE radarDrawMode, MAPTILE *WTile) { PIELIGHT WScr = WZCOL_BLACK; // squelch warning // draw radar on/off feature if (!getRevealStatus() && !TEST_TILE_VISIBLE(selectedPlayer, WTile)) { return WZCOL_RADAR_BACKGROUND; } switch (radarDrawMode) { case RADAR_MODE_TERRAIN: { // draw radar terrain on/off feature PIELIGHT col = tileColours[TileNumber_tile(WTile->texture)]; col.byte.r = sqrtf(col.byte.r * WTile->illumination); col.byte.b = sqrtf(col.byte.b * WTile->illumination); col.byte.g = sqrtf(col.byte.g * WTile->illumination); if (terrainType(WTile) == TER_CLIFFFACE) { col.byte.r /= 2; col.byte.g /= 2; col.byte.b /= 2; } if (!hasSensorOnTile(WTile, selectedPlayer)) { col.byte.r = col.byte.r * 2 / 3; col.byte.g = col.byte.g * 2 / 3; col.byte.b = col.byte.b * 2 / 3; } if (!TEST_TILE_VISIBLE(selectedPlayer, WTile)) { col.byte.r /= 2; col.byte.g /= 2; col.byte.b /= 2; } WScr = col; } break; case RADAR_MODE_COMBINED: { // draw radar terrain on/off feature PIELIGHT col = tileColours[TileNumber_tile(WTile->texture)]; col.byte.r = sqrtf(col.byte.r * (WTile->illumination + WTile->height / ELEVATION_SCALE) / 2); col.byte.b = sqrtf(col.byte.b * (WTile->illumination + WTile->height / ELEVATION_SCALE) / 2); col.byte.g = sqrtf(col.byte.g * (WTile->illumination + WTile->height / ELEVATION_SCALE) / 2); if (terrainType(WTile) == TER_CLIFFFACE) { col.byte.r /= 2; col.byte.g /= 2; col.byte.b /= 2; } if (!hasSensorOnTile(WTile, selectedPlayer)) { col.byte.r = col.byte.r * 2 / 3; col.byte.g = col.byte.g * 2 / 3; col.byte.b = col.byte.b * 2 / 3; } if (!TEST_TILE_VISIBLE(selectedPlayer, WTile)) { col.byte.r /= 2; col.byte.g /= 2; col.byte.b /= 2; } WScr = col; } break; case RADAR_MODE_HEIGHT_MAP: { WScr.byte.r = WScr.byte.g = WScr.byte.b = WTile->height / ELEVATION_SCALE; } break; case RADAR_MODE_NO_TERRAIN: { WScr = WZCOL_RADAR_BACKGROUND; } break; case NUM_RADAR_MODES: { assert(false); } break; } return WScr; }
/* Moves one of the particles */ static void processParticle(ATPART *psPart) { SDWORD groundHeight; Vector3i pos; UDWORD x, y; MAPTILE *psTile; /* Only move if the game isn't paused */ if (!gamePaused()) { /* Move the particle - frame rate controlled */ psPart->position.x += graphicsTimeAdjustedIncrement(psPart->velocity.x); psPart->position.y += graphicsTimeAdjustedIncrement(psPart->velocity.y); psPart->position.z += graphicsTimeAdjustedIncrement(psPart->velocity.z); /* Wrap it around if it's gone off grid... */ testParticleWrap(psPart); /* If it's gone off the WORLD... */ if (psPart->position.x < 0 || psPart->position.z < 0 || psPart->position.x > ((mapWidth - 1)*TILE_UNITS) || psPart->position.z > ((mapHeight - 1)*TILE_UNITS)) { /* The kill it */ psPart->status = APS_INACTIVE; return; } /* What height is the ground under it? Only do if low enough...*/ if (psPart->position.y < 255 * ELEVATION_SCALE) { /* Get ground height */ groundHeight = map_Height(psPart->position.x, psPart->position.z); /* Are we below ground? */ if ((int)psPart->position.y < groundHeight || psPart->position.y < 0.f) { /* Kill it and return */ psPart->status = APS_INACTIVE; if (psPart->type == AP_RAIN) { x = map_coord(psPart->position.x); y = map_coord(psPart->position.z); psTile = mapTile(x, y); if (terrainType(psTile) == TER_WATER && TEST_TILE_VISIBLE(selectedPlayer, psTile)) { pos.x = psPart->position.x; pos.z = psPart->position.z; pos.y = groundHeight; effectSetSize(60); addEffect(&pos, EFFECT_EXPLOSION, EXPLOSION_TYPE_SPECIFIED, true, getImdFromIndex(MI_SPLASH), 0); } } return; } } if (psPart->type == AP_SNOW) { if (rand() % 30 == 1) { psPart->velocity.z = (float)SNOW_SPEED_DRIFT; } if (rand() % 30 == 1) { psPart->velocity.x = (float)SNOW_SPEED_DRIFT; } } } }