mirror of
https://github.com/1dot13/source.git
synced 2026-09-09 14:46:05 +02:00
Reworked the DrawMap function. Flattens the large switch in it, removes the need for a few if checks that were done in every iteration of the old switch case loop and also shades all the map sectors using only one call to Lock- and UnlockVideoSurface instead of continuously locking and unlocking the surfaces when shading every single map element. (by Asdow)
git-svn-id: https://ja2svn.mooo.com/source/ja2/trunk/GameSource/ja2_v1.13/Build@8885 3b4a5df2-a311-0410-b5c6-a8a6f20db521
This commit is contained in:
@@ -526,6 +526,7 @@ void ShowTownText( void );
|
|||||||
void DrawTownLabels(STR16 pString, STR16 pStringA,UINT16 usFirstX, UINT16 usFirstY);
|
void DrawTownLabels(STR16 pString, STR16 pStringA,UINT16 usFirstX, UINT16 usFirstY);
|
||||||
void ShowTeamAndVehicles(INT32 fShowFlags);
|
void ShowTeamAndVehicles(INT32 fShowFlags);
|
||||||
BOOLEAN ShadeMapElem( INT16 sMapX, INT16 sMapY, INT32 iColor );
|
BOOLEAN ShadeMapElem( INT16 sMapX, INT16 sMapY, INT32 iColor );
|
||||||
|
BOOLEAN ShadeMapElements(const INT32(&colorMap)[16][16]);
|
||||||
void AdjustXForLeftMapEdge(STR16 wString, INT16 *psX, INT32 iFont);
|
void AdjustXForLeftMapEdge(STR16 wString, INT16 *psX, INT32 iFont);
|
||||||
void BlitTownGridMarkers( void );
|
void BlitTownGridMarkers( void );
|
||||||
void BlitMineGridMarkers( void );
|
void BlitMineGridMarkers( void );
|
||||||
@@ -709,254 +710,317 @@ void HandleShowingOfEnemiesWithMilitiaOn( void )
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// colour for a sector on the map
|
|
||||||
// aType = 0: disease
|
INT32 GetMapColourForWeather(const INT16 sX, const INT16 sY) noexcept
|
||||||
// aType = 1: weather
|
|
||||||
// aType = 2: intel
|
|
||||||
INT32 GetMapColour( INT16 sX, INT16 sY, UINT8 aType )
|
|
||||||
{
|
{
|
||||||
UINT8 sector = SECTOR( sX, sY );
|
const INT32 weatherColors[]{
|
||||||
|
MAP_SHADE_BLACK,
|
||||||
|
MAP_SHADE_LT_CYAN,
|
||||||
|
MAP_SHADE_LT_BLUE,
|
||||||
|
MAP_SHADE_ORANGE,
|
||||||
|
MAP_SHADE_LT_GREY
|
||||||
|
};
|
||||||
|
|
||||||
if ( aType == 0 )
|
const auto sector = SECTOR(sX, sY);
|
||||||
|
const SECTORINFO *const pSectorInfo = &(SectorInfo[sector]);
|
||||||
|
const auto weather = pSectorInfo->usWeather;
|
||||||
|
|
||||||
|
return weatherColors[weather];
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void FillMapColoursForWeather(INT32(&colorMap)[ MAXIMUM_VALID_Y_COORDINATE ][ MAXIMUM_VALID_X_COORDINATE ]) noexcept
|
||||||
|
{
|
||||||
|
for (UINT8 sY = 0; sY < MAXIMUM_VALID_Y_COORDINATE; ++sY)
|
||||||
{
|
{
|
||||||
SECTORINFO *pSectorInfo = &( SectorInfo[sector] );
|
for (UINT8 sX = 0; sX < MAXIMUM_VALID_X_COORDINATE; ++sX)
|
||||||
|
|
||||||
// display sector information only if we know about infection there
|
|
||||||
if ( pSectorInfo && ( ( pSectorInfo->usInfectionFlag & SECTORDISEASE_DIAGNOSED_PLAYER ) || gubFact[FACT_DISEASE_WHODATA_ACCESS] ) )
|
|
||||||
{
|
{
|
||||||
FLOAT diseaseratio = pSectorInfo->fDiseasePoints / DISEASE_MAX_SECTOR;
|
const auto xCoord = sX + MINIMUM_VALID_X_COORDINATE;
|
||||||
|
const auto yCoord = sY + MINIMUM_VALID_Y_COORDINATE;
|
||||||
|
|
||||||
if ( pSectorInfo->fDiseasePoints < 0.1f )
|
colorMap[sY][sX] = GetMapColourForWeather(xCoord, yCoord);
|
||||||
return MAP_SHADE_BLACK;
|
|
||||||
else if ( diseaseratio < 0.05f )
|
|
||||||
return MAP_SHADE_DK_GREEN;
|
|
||||||
else if ( diseaseratio < 0.1f )
|
|
||||||
return MAP_SHADE_MD_GREEN;
|
|
||||||
else if ( diseaseratio < 0.25f )
|
|
||||||
return MAP_SHADE_LT_GREEN;
|
|
||||||
else if ( diseaseratio < 0.4f )
|
|
||||||
return MAP_SHADE_MD_YELLOW;
|
|
||||||
else if ( diseaseratio < 0.65f )
|
|
||||||
return MAP_SHADE_ORANGE;
|
|
||||||
else if ( diseaseratio < 0.8f )
|
|
||||||
return MAP_SHADE_DK_RED;
|
|
||||||
else if ( diseaseratio < 0.9f )
|
|
||||||
return MAP_SHADE_MD_RED;
|
|
||||||
else
|
|
||||||
return MAP_SHADE_LT_RED;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if ( aType == 1 )
|
}
|
||||||
{
|
|
||||||
SECTORINFO *pSectorInfo = &( SectorInfo[sector] );
|
|
||||||
|
|
||||||
// display sector information only if we know about infection there
|
|
||||||
if ( pSectorInfo )
|
void FillMapColoursForIntel(INT32(&colorMap)[ MAXIMUM_VALID_Y_COORDINATE ][ MAXIMUM_VALID_X_COORDINATE ]) noexcept
|
||||||
|
{
|
||||||
|
for (UINT8 sY = 0; sY < MAXIMUM_VALID_Y_COORDINATE; ++sY)
|
||||||
|
{
|
||||||
|
for (UINT8 sX = 0; sX < MAXIMUM_VALID_X_COORDINATE; ++sX)
|
||||||
{
|
{
|
||||||
switch ( pSectorInfo->usWeather )
|
const auto xCoord = sX + MINIMUM_VALID_X_COORDINATE;
|
||||||
|
const auto yCoord = sY + MINIMUM_VALID_Y_COORDINATE;
|
||||||
|
const auto sector = SECTOR(xCoord, yCoord);
|
||||||
|
|
||||||
|
colorMap[sY][sX] = gMapIntelData[sector].mapcolour;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
INT32 GetMapColourForDisease(const INT16 sX, const INT16 sY) noexcept
|
||||||
|
{
|
||||||
|
const UINT8 sector = SECTOR(sX, sY);
|
||||||
|
const SECTORINFO *const pSectorInfo = &(SectorInfo[sector]);
|
||||||
|
|
||||||
|
// display sector information only if we know about infection there
|
||||||
|
if (pSectorInfo && ((pSectorInfo->usInfectionFlag & SECTORDISEASE_DIAGNOSED_PLAYER) || gubFact[FACT_DISEASE_WHODATA_ACCESS]))
|
||||||
|
{
|
||||||
|
const FLOAT diseaseratio = pSectorInfo->fDiseasePoints / DISEASE_MAX_SECTOR;
|
||||||
|
|
||||||
|
if (pSectorInfo->fDiseasePoints < 0.1f)
|
||||||
|
return MAP_SHADE_BLACK;
|
||||||
|
else if (diseaseratio < 0.05f)
|
||||||
|
return MAP_SHADE_DK_GREEN;
|
||||||
|
else if (diseaseratio < 0.1f)
|
||||||
|
return MAP_SHADE_MD_GREEN;
|
||||||
|
else if (diseaseratio < 0.25f)
|
||||||
|
return MAP_SHADE_LT_GREEN;
|
||||||
|
else if (diseaseratio < 0.4f)
|
||||||
|
return MAP_SHADE_MD_YELLOW;
|
||||||
|
else if (diseaseratio < 0.65f)
|
||||||
|
return MAP_SHADE_ORANGE;
|
||||||
|
else if (diseaseratio < 0.8f)
|
||||||
|
return MAP_SHADE_DK_RED;
|
||||||
|
else if (diseaseratio < 0.9f)
|
||||||
|
return MAP_SHADE_MD_RED;
|
||||||
|
else
|
||||||
|
return MAP_SHADE_LT_RED;
|
||||||
|
}
|
||||||
|
|
||||||
|
return MAP_SHADE_BLACK;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void FillMapColoursForDisease(INT32(&colorMap)[ MAXIMUM_VALID_Y_COORDINATE ][ MAXIMUM_VALID_X_COORDINATE ]) noexcept
|
||||||
|
{
|
||||||
|
for (UINT8 sY = 0; sY < MAXIMUM_VALID_Y_COORDINATE; ++sY)
|
||||||
|
{
|
||||||
|
for (UINT8 sX = 0; sX < MAXIMUM_VALID_X_COORDINATE; ++sX)
|
||||||
|
{
|
||||||
|
const auto xCoord = sX + MINIMUM_VALID_X_COORDINATE;
|
||||||
|
const auto yCoord = sY + MINIMUM_VALID_Y_COORDINATE;
|
||||||
|
|
||||||
|
colorMap[sY][sX] = GetMapColourForDisease(xCoord, yCoord);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void fillMapColoursForVisitedSectors(INT32(&colorMap)[ MAXIMUM_VALID_Y_COORDINATE ][ MAXIMUM_VALID_X_COORDINATE ])
|
||||||
|
{
|
||||||
|
auto sectorColor = MAP_SHADE_BLACK;
|
||||||
|
if (gGameSettings.fOptions[TOPTION_ALT_MAP_COLOR])
|
||||||
|
{
|
||||||
|
// HEADROCK HAM 4: An alternate display for the map in normal mode. Unexplored sectors
|
||||||
|
// are in grey, similar to a recon map. Others are left in normal vivid color.
|
||||||
|
sectorColor = MAP_SHADE_DK_GREY;
|
||||||
|
}
|
||||||
|
|
||||||
|
for (UINT8 sY = 0; sY < MAXIMUM_VALID_Y_COORDINATE; ++sY)
|
||||||
|
{
|
||||||
|
for (UINT8 sX = 0; sX < MAXIMUM_VALID_X_COORDINATE; ++sX)
|
||||||
|
{
|
||||||
|
const auto xCoord = sX + MINIMUM_VALID_X_COORDINATE;
|
||||||
|
const auto yCoord = sY + MINIMUM_VALID_Y_COORDINATE;
|
||||||
|
|
||||||
|
// not visited
|
||||||
|
if (GetSectorFlagStatus(xCoord, yCoord, (UINT8)iCurrentMapSectorZ, SF_ALREADY_VISITED) == FALSE)
|
||||||
{
|
{
|
||||||
case WEATHER_FORECAST_RAIN:
|
colorMap[sY][sX] = sectorColor;
|
||||||
return MAP_SHADE_LT_CYAN;
|
}
|
||||||
break;
|
else
|
||||||
case WEATHER_FORECAST_THUNDERSHOWERS:
|
{
|
||||||
return MAP_SHADE_LT_BLUE;
|
colorMap[sY][sX] = MAP_SHADE_MAX; // Used to mark sectors that will not be shaded
|
||||||
break;
|
|
||||||
case WEATHER_FORECAST_SANDSTORM:
|
|
||||||
return MAP_SHADE_ORANGE;
|
|
||||||
break;
|
|
||||||
case WEATHER_FORECAST_SNOW:
|
|
||||||
return MAP_SHADE_LT_GREY;
|
|
||||||
break;
|
|
||||||
case WEATHER_FORECAST_NORMAL:
|
|
||||||
default:
|
|
||||||
return MAP_SHADE_BLACK;
|
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if ( aType == 2 )
|
|
||||||
{
|
|
||||||
return gMapIntelData[sector].mapcolour;
|
|
||||||
}
|
|
||||||
|
|
||||||
return MAP_SHADE_DK_GREY;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
UINT32 DrawMap( void )
|
|
||||||
|
void fillMapColoursForAirSpace(INT32(&colorMap)[ MAXIMUM_VALID_Y_COORDINATE ][ MAXIMUM_VALID_X_COORDINATE ])
|
||||||
{
|
{
|
||||||
HVSURFACE hSrcVSurface;
|
for (UINT8 sY = 0; sY < MAXIMUM_VALID_Y_COORDINATE; ++sY)
|
||||||
UINT32 uiDestPitchBYTES;
|
{
|
||||||
UINT32 uiSrcPitchBYTES;
|
for (UINT8 sX = 0; sX < MAXIMUM_VALID_X_COORDINATE; ++sX)
|
||||||
UINT16 *pDestBuf;
|
{
|
||||||
UINT8 *pSrcBuf;
|
const auto xCoord = sX + MINIMUM_VALID_X_COORDINATE;
|
||||||
INT16 cnt, cnt2;
|
const auto yCoord = sY + MINIMUM_VALID_Y_COORDINATE;
|
||||||
INT32 iCounter = 0;
|
|
||||||
INT32 iCounter2 = 0;
|
|
||||||
INT16 sBaseSectorValue = 0;
|
|
||||||
|
|
||||||
//MAP_VIEW_START_X = (SCREEN_WIDTH - 370);
|
const BOOLEAN fAlreadyVisited = GetSectorFlagStatus(xCoord, yCoord, (UINT8)iCurrentMapSectorZ, SF_ALREADY_VISITED);
|
||||||
//MAP_VIEW_START_Y = 10;
|
|
||||||
|
|
||||||
|
if (StrategicMap[xCoord + yCoord * WORLD_MAP_X].usAirType & AIRSPACE_PLAYER_ACTIVE)
|
||||||
|
{
|
||||||
|
if (StrategicMap[xCoord + yCoord * WORLD_MAP_X].usAirType & AIRSPACE_ENEMY_ACTIVE)
|
||||||
|
{
|
||||||
|
// sector not visited and not air controlled
|
||||||
|
colorMap[sY][sX] = fAlreadyVisited ? MAP_SHADE_LT_YELLOW : MAP_SHADE_DK_YELLOW;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
// sector not visited but air controlled
|
||||||
|
colorMap[sY][sX] = fAlreadyVisited ? MAP_SHADE_LT_GREEN : MAP_SHADE_DK_GREEN;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (StrategicMap[xCoord + yCoord * WORLD_MAP_X].usAirType & AIRSPACE_ENEMY_ACTIVE)
|
||||||
|
{
|
||||||
|
// sector not visited and not air controlled
|
||||||
|
colorMap[sY][sX] = fAlreadyVisited ? MAP_SHADE_LT_RED : MAP_SHADE_DK_RED;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
// sector not visited, currently nobody controls the airspace
|
||||||
|
//colorMap[sY][sX] = fAlreadyVisited ? MAP_SHADE_LT_BLUE : MAP_SHADE_MD_BLUE;
|
||||||
|
colorMap[sY][sX] = MAP_SHADE_MAX; // Used to mark sectors that will not be shaded
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void fillMapColoursForSamSiteAirSpace( INT32( &colorMap )[ MAXIMUM_VALID_Y_COORDINATE ][ MAXIMUM_VALID_X_COORDINATE ] )
|
||||||
|
{
|
||||||
|
for (INT16 cnt2 = MINIMUM_VALID_Y_COORDINATE; cnt2 <= MAXIMUM_VALID_Y_COORDINATE; ++cnt2)
|
||||||
|
{
|
||||||
|
for (INT16 cnt = MINIMUM_VALID_X_COORDINATE; cnt <= MAXIMUM_VALID_X_COORDINATE; ++cnt)
|
||||||
|
{
|
||||||
|
BOOLEAN a = FALSE;
|
||||||
|
BOOLEAN b = FALSE;
|
||||||
|
BOOLEAN c = FALSE;
|
||||||
|
BOOLEAN d = FALSE;
|
||||||
|
|
||||||
|
{
|
||||||
|
for (int i = 0; i < NUMBER_OF_SAMS; ++i)
|
||||||
|
{
|
||||||
|
BOOLEAN samworking = FALSE;
|
||||||
|
if (DoesSamCoverSector( i, SECTOR( cnt, cnt2 ), &samworking ) && samworking)
|
||||||
|
{
|
||||||
|
if (i == 0) a = TRUE;
|
||||||
|
if (i == 1) b = TRUE;
|
||||||
|
if (i == 2) c = TRUE;
|
||||||
|
if (i == 3) d = TRUE;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
const auto x = cnt - MINIMUM_VALID_X_COORDINATE;
|
||||||
|
const auto y = cnt2 - MINIMUM_VALID_Y_COORDINATE;
|
||||||
|
if (a && !b && !c && !d)
|
||||||
|
colorMap[ y ][ x ] = MAP_SHADE_MIX_RED;
|
||||||
|
else if (!a && b && !c && !d)
|
||||||
|
colorMap[ y ][ x ] = MAP_SHADE_MIX_GREEN;
|
||||||
|
else if (!a && !b && c && !d)
|
||||||
|
colorMap[ y ][ x ] = MAP_SHADE_MIX_BLUE;
|
||||||
|
else if (!a && !b && !c && d)
|
||||||
|
colorMap[ y ][ x ] = MAP_SHADE_MIX_YELLOW;
|
||||||
|
else if (a && b && !c && !d)
|
||||||
|
colorMap[ y ][ x ] = MAP_SHADE_MIX_RED_GREEN;
|
||||||
|
else if (a && !b && c && !d)
|
||||||
|
colorMap[ y ][ x ] = MAP_SHADE_MIX_RED_BLUE;
|
||||||
|
else if (a && !b && !c && d)
|
||||||
|
colorMap[ y ][ x ] = MAP_SHADE_MIX_RED_YELLOW;
|
||||||
|
else if (!a && b && c && !d)
|
||||||
|
colorMap[ y ][ x ] = MAP_SHADE_MIX_GREEN_BLUE;
|
||||||
|
else if (!a && b && !c && d)
|
||||||
|
colorMap[ y ][ x ] = MAP_SHADE_MIX_GREEN_YELLOW;
|
||||||
|
else if (!a && !b && c && d)
|
||||||
|
colorMap[ y ][ x ] = MAP_SHADE_MIX_BLUE_YELLOW;
|
||||||
|
else if (a && b && c && !d)
|
||||||
|
colorMap[ y ][ x ] = MAP_SHADE_MIX_RED_GREEN_BLUE;
|
||||||
|
else if (a && b && !c && d)
|
||||||
|
colorMap[ y ][ x ] = MAP_SHADE_MIX_RED_GREEN_YELLOW;
|
||||||
|
else if (a && !b && c && d)
|
||||||
|
colorMap[ y ][ x ] = MAP_SHADE_MIX_RED_BLUE_YELLOW;
|
||||||
|
else if (!a && b && c && d)
|
||||||
|
colorMap[ y ][ x ] = MAP_SHADE_MIX_GREEN_BLUE_YELLOW;
|
||||||
|
else if (a && b && c && d)
|
||||||
|
colorMap[ y ][ x ] = MAP_SHADE_MIX_RED_GREEN_BLUE_YELLOW;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
UINT32 DrawMap(void)
|
||||||
|
{
|
||||||
MapScreenRect.iLeft = MAP_VIEW_START_X + MAP_GRID_X - 2;
|
MapScreenRect.iLeft = MAP_VIEW_START_X + MAP_GRID_X - 2;
|
||||||
MapScreenRect.iTop = MAP_VIEW_START_Y + MAP_GRID_Y - 1;
|
MapScreenRect.iTop = MAP_VIEW_START_Y + MAP_GRID_Y - 1;
|
||||||
MapScreenRect.iRight = MAP_VIEW_START_X + MAP_VIEW_WIDTH - 1 + MAP_GRID_X;
|
MapScreenRect.iRight = MAP_VIEW_START_X + MAP_VIEW_WIDTH - 1 + MAP_GRID_X;
|
||||||
MapScreenRect.iBottom = MAP_VIEW_START_Y + MAP_VIEW_HEIGHT - 10 + MAP_GRID_Y;
|
MapScreenRect.iBottom = MAP_VIEW_START_Y + MAP_VIEW_HEIGHT - 10 + MAP_GRID_Y;
|
||||||
|
|
||||||
//MapScreenRect={ (MAP_VIEW_START_X+MAP_GRID_X - 2), ( MAP_VIEW_START_Y+MAP_GRID_Y - 1), MAP_VIEW_START_X + MAP_VIEW_WIDTH - 1 + MAP_GRID_X , MAP_VIEW_START_Y+MAP_VIEW_HEIGHT-10+MAP_GRID_Y};
|
if (!iCurrentMapSectorZ)
|
||||||
|
{ // Aboveground sectors
|
||||||
|
|
||||||
if ( gusMapDisplayColourMode == MAP_DISPLAY_INTEL )
|
UINT32 uiDestPitchBYTES;
|
||||||
{
|
UINT16 *pDestBuf = (UINT16*)LockVideoSurface(guiSAVEBUFFER, &uiDestPitchBYTES);
|
||||||
extern void DetermineMapIntelData(INT32 asSectorZ);
|
|
||||||
|
|
||||||
// This is the location where we should call lua and refill our intel data
|
HVSURFACE hSrcVSurface;
|
||||||
DetermineMapIntelData( iCurrentMapSectorZ );
|
CHECKF(GetVideoSurface(&hSrcVSurface, guiBIGMAP));
|
||||||
}
|
|
||||||
|
|
||||||
if( !iCurrentMapSectorZ )
|
UINT32 uiSrcPitchBYTES;
|
||||||
{
|
UINT8 *pSrcBuf = LockVideoSurface(guiBIGMAP, &uiSrcPitchBYTES);
|
||||||
pDestBuf = (UINT16*)LockVideoSurface( guiSAVEBUFFER, &uiDestPitchBYTES);
|
|
||||||
|
|
||||||
CHECKF( GetVideoSurface( &hSrcVSurface, guiBIGMAP) );
|
Blt8BPPDataTo16BPPBufferHalf(pDestBuf, uiDestPitchBYTES, hSrcVSurface, pSrcBuf, uiSrcPitchBYTES, MAP_VIEW_START_X + 1, MAP_VIEW_START_Y);
|
||||||
pSrcBuf = LockVideoSurface( guiBIGMAP, &uiSrcPitchBYTES);
|
|
||||||
|
|
||||||
// clip blits to mapscreen region
|
UnLockVideoSurface(guiBIGMAP);
|
||||||
//ClipBlitsToMapViewRegion( );
|
UnLockVideoSurface(guiSAVEBUFFER);
|
||||||
|
|
||||||
Blt8BPPDataTo16BPPBufferHalf( pDestBuf, uiDestPitchBYTES, hSrcVSurface, pSrcBuf, uiSrcPitchBYTES, MAP_VIEW_START_X + 1, MAP_VIEW_START_Y );
|
|
||||||
|
|
||||||
UnLockVideoSurface( guiBIGMAP );
|
// shade map sectors (must be done before icons!)
|
||||||
UnLockVideoSurface( guiSAVEBUFFER );
|
if (!is_networked) //Don't shade anything if we're in multiplayer game
|
||||||
|
|
||||||
// draw SAM sites
|
|
||||||
//ShowSAMSitesOnStrategicMap( );
|
|
||||||
|
|
||||||
//UpdateAirspaceControl();
|
|
||||||
|
|
||||||
if ( !iCurrentMapSectorZ )
|
|
||||||
{
|
{
|
||||||
// shade map sectors (must be done after Tixa/Orta/Mine icons have been blitted, but before icons!)
|
INT32 colorMap[ MAXIMUM_VALID_Y_COORDINATE ][ MAXIMUM_VALID_X_COORDINATE ]{};
|
||||||
for ( cnt = 1; cnt < MAP_WORLD_X - 1; ++cnt )
|
|
||||||
|
switch (gusMapDisplayColourMode)
|
||||||
{
|
{
|
||||||
for ( cnt2 = 1; cnt2 < MAP_WORLD_Y - 1; ++cnt2 )
|
case MAP_DISPLAY_AIRSPACE:
|
||||||
{
|
{
|
||||||
// LATE DESIGN CHANGE: darken sectors not yet visited, instead of those under known enemy control
|
fillMapColoursForAirSpace(colorMap);
|
||||||
if(!is_networked) //hayden - dont darken anything
|
ShadeMapElements(colorMap);
|
||||||
{
|
}
|
||||||
switch ( gusMapDisplayColourMode )
|
break;
|
||||||
{
|
|
||||||
case MAP_DISPLAY_AIRSPACE:
|
|
||||||
{
|
|
||||||
BOOLEAN fAlreadyVisited = GetSectorFlagStatus( cnt, cnt2, (UINT8)iCurrentMapSectorZ, SF_ALREADY_VISITED );
|
|
||||||
|
|
||||||
if ( StrategicMap[cnt + cnt2 * WORLD_MAP_X].usAirType & AIRSPACE_PLAYER_ACTIVE )
|
case MAP_DISPLAY_AIRSPACE_COLOURED_SAMS:
|
||||||
{
|
{
|
||||||
if ( StrategicMap[cnt + cnt2 * WORLD_MAP_X].usAirType & AIRSPACE_ENEMY_ACTIVE )
|
fillMapColoursForSamSiteAirSpace(colorMap);
|
||||||
{
|
ShadeMapElements(colorMap);
|
||||||
// sector not visited and not air controlled
|
}
|
||||||
ShadeMapElem( cnt, cnt2, fAlreadyVisited ? MAP_SHADE_LT_YELLOW : MAP_SHADE_DK_YELLOW );
|
break;
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
// sector not visited but air controlled
|
|
||||||
ShadeMapElem( cnt, cnt2, fAlreadyVisited ? MAP_SHADE_LT_GREEN : MAP_SHADE_DK_GREEN );
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else if ( StrategicMap[cnt + cnt2 * WORLD_MAP_X].usAirType & AIRSPACE_ENEMY_ACTIVE )
|
|
||||||
{
|
|
||||||
// sector not visited and not air controlled
|
|
||||||
ShadeMapElem( cnt, cnt2, fAlreadyVisited ? MAP_SHADE_LT_RED : MAP_SHADE_DK_RED );
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
// sector not visited, currently nobody controls the airspace
|
|
||||||
//ShadeMapElem( cnt, cnt2, fAlreadyVisited ? MAP_SHADE_LT_BLUE : MAP_SHADE_MD_BLUE );
|
|
||||||
}
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
|
|
||||||
case MAP_DISPLAY_AIRSPACE_COLOURED_SAMS:
|
case MAP_DISPLAY_DISEASE:
|
||||||
{
|
{
|
||||||
BOOLEAN a = FALSE;
|
FillMapColoursForDisease(colorMap);
|
||||||
BOOLEAN b = FALSE;
|
ShadeMapElements(colorMap);
|
||||||
BOOLEAN c = FALSE;
|
ShowDiseaseOnMap();
|
||||||
BOOLEAN d = FALSE;
|
}
|
||||||
BOOLEAN samworking = FALSE;
|
break;
|
||||||
for ( int i = 0; i < NUMBER_OF_SAMS; ++i )
|
|
||||||
{
|
|
||||||
if ( DoesSamCoverSector( i, SECTOR( cnt, cnt2 ), &samworking ) && samworking )
|
|
||||||
{
|
|
||||||
if ( i == 0 ) a = TRUE;
|
|
||||||
else if ( i == 1 ) b = TRUE;
|
|
||||||
else if ( i == 2 ) c = TRUE;
|
|
||||||
else if ( i == 3 ) d = TRUE;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if ( a && !b && !c && !d)
|
case MAP_DISPLAY_WEATHER:
|
||||||
ShadeMapElem( cnt, cnt2, MAP_SHADE_MIX_RED );
|
{
|
||||||
else if ( !a && b && !c && !d )
|
FillMapColoursForWeather(colorMap);
|
||||||
ShadeMapElem( cnt, cnt2, MAP_SHADE_MIX_GREEN );
|
ShadeMapElements(colorMap);
|
||||||
else if ( !a && !b && c && !d )
|
}
|
||||||
ShadeMapElem( cnt, cnt2, MAP_SHADE_MIX_BLUE );
|
break;
|
||||||
else if ( !a && !b && !c && d )
|
|
||||||
ShadeMapElem( cnt, cnt2, MAP_SHADE_MIX_YELLOW );
|
|
||||||
else if ( a && b && !c && !d )
|
|
||||||
ShadeMapElem( cnt, cnt2, MAP_SHADE_MIX_RED_GREEN );
|
|
||||||
else if ( a && !b && c && !d )
|
|
||||||
ShadeMapElem( cnt, cnt2, MAP_SHADE_MIX_RED_BLUE );
|
|
||||||
else if ( a && !b && !c && d )
|
|
||||||
ShadeMapElem( cnt, cnt2, MAP_SHADE_MIX_RED_YELLOW );
|
|
||||||
else if ( !a && b && c && !d )
|
|
||||||
ShadeMapElem( cnt, cnt2, MAP_SHADE_MIX_GREEN_BLUE );
|
|
||||||
else if ( !a && b && !c && d )
|
|
||||||
ShadeMapElem( cnt, cnt2, MAP_SHADE_MIX_GREEN_YELLOW );
|
|
||||||
else if ( !a && !b && c && d )
|
|
||||||
ShadeMapElem( cnt, cnt2, MAP_SHADE_MIX_BLUE_YELLOW );
|
|
||||||
else if ( a && b && c && !d )
|
|
||||||
ShadeMapElem( cnt, cnt2, MAP_SHADE_MIX_RED_GREEN_BLUE );
|
|
||||||
else if ( a && b && !c && d )
|
|
||||||
ShadeMapElem( cnt, cnt2, MAP_SHADE_MIX_RED_GREEN_YELLOW );
|
|
||||||
else if ( a && !b && c && d )
|
|
||||||
ShadeMapElem( cnt, cnt2, MAP_SHADE_MIX_RED_BLUE_YELLOW );
|
|
||||||
else if ( !a && b && c && d )
|
|
||||||
ShadeMapElem( cnt, cnt2, MAP_SHADE_MIX_GREEN_BLUE_YELLOW );
|
|
||||||
else if ( a && b && c && d )
|
|
||||||
ShadeMapElem( cnt, cnt2, MAP_SHADE_MIX_RED_GREEN_BLUE_YELLOW );
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
|
|
||||||
case MAP_DISPLAY_DISEASE:
|
case MAP_DISPLAY_INTEL:
|
||||||
ShadeMapElem( cnt, cnt2, GetMapColour( cnt, cnt2, 0 ) );
|
{
|
||||||
break;
|
// This is the location where we should call lua and refill our intel data
|
||||||
|
extern void DetermineMapIntelData(INT32 asSectorZ);
|
||||||
|
DetermineMapIntelData(iCurrentMapSectorZ);
|
||||||
|
|
||||||
case MAP_DISPLAY_WEATHER:
|
FillMapColoursForIntel(colorMap);
|
||||||
ShadeMapElem( cnt, cnt2, GetMapColour( cnt, cnt2, 1 ) );
|
ShadeMapElements(colorMap);
|
||||||
break;
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
case MAP_DISPLAY_INTEL:
|
case MAP_DISPLAY_NORMAL:
|
||||||
ShadeMapElem( cnt, cnt2, GetMapColour( cnt, cnt2, 2 ) );
|
default:
|
||||||
break;
|
{
|
||||||
|
fillMapColoursForVisitedSectors(colorMap);
|
||||||
case MAP_DISPLAY_NORMAL:
|
ShadeMapElements(colorMap);
|
||||||
default:
|
}
|
||||||
if ( GetSectorFlagStatus( cnt, cnt2, (UINT8)iCurrentMapSectorZ, SF_ALREADY_VISITED ) == FALSE )
|
break;
|
||||||
{
|
|
||||||
// not visited
|
|
||||||
if ( gGameSettings.fOptions[TOPTION_ALT_MAP_COLOR] )
|
|
||||||
{
|
|
||||||
// HEADROCK HAM 4: An alternate display for the map in normal mode. Unexplored sectors
|
|
||||||
// are in grey, similar to a recon map. Others are left in normal vivid color.
|
|
||||||
ShadeMapElem( cnt, cnt2, MAP_SHADE_DK_GREY );
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
ShadeMapElem( cnt, cnt2, MAP_SHADE_BLACK );
|
|
||||||
}
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -964,127 +1028,96 @@ UINT32 DrawMap( void )
|
|||||||
// DOESN'T MERELY SHADE THE EXISTING MAP SURFACE, BUT INSTEAD GRABS THE ORIGINAL GRAPHICS FROM BIGMAP, AND CHANGES
|
// DOESN'T MERELY SHADE THE EXISTING MAP SURFACE, BUT INSTEAD GRABS THE ORIGINAL GRAPHICS FROM BIGMAP, AND CHANGES
|
||||||
// THEIR PALETTE. BLITTING ICONS PRIOR TO SHADING WOULD MEAN THEY DON'T SHOW UP IN AIRSPACE VIEW AT ALL.
|
// THEIR PALETTE. BLITTING ICONS PRIOR TO SHADING WOULD MEAN THEY DON'T SHOW UP IN AIRSPACE VIEW AT ALL.
|
||||||
|
|
||||||
for (cnt = 1; cnt < NUM_TOWNS; ++cnt)
|
for (INT16 cnt = 1; cnt < NUM_TOWNS; ++cnt)
|
||||||
{
|
{
|
||||||
if ( gfHiddenTown[cnt] && gfIconTown[cnt] && gfDrawHiddenTown[cnt] )
|
if (gfHiddenTown[cnt] && gfIconTown[cnt] && gfDrawHiddenTown[cnt])
|
||||||
{
|
{
|
||||||
sBaseSectorValue = sBaseSectorList[ cnt-1 ];
|
const INT16 sBaseSectorValue = sBaseSectorList[cnt - 1];
|
||||||
|
|
||||||
INT8 bTownId = GetTownIdForSector( SECTORX( sBaseSectorValue ), SECTORY( sBaseSectorValue ) );
|
const INT8 bTownId = GetTownIdForSector(SECTORX(sBaseSectorValue), SECTORY(sBaseSectorValue));
|
||||||
if ( /*bTownId != 0 &&*/ bTownId < NUM_TOWNS )
|
if (bTownId < NUM_TOWNS)
|
||||||
{
|
{
|
||||||
DrawIconL( gHiddenIcon[cnt].IconX, gHiddenIcon[cnt].IconY, cnt );
|
DrawIconL(gHiddenIcon[cnt].IconX, gHiddenIcon[cnt].IconY, cnt);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
// if Orta found
|
|
||||||
if( fFoundOrta )
|
|
||||||
{
|
|
||||||
DrawOrta();
|
|
||||||
}
|
|
||||||
|
|
||||||
// if Tixa found
|
|
||||||
if( fFoundTixa )
|
|
||||||
{
|
|
||||||
DrawTixa();
|
|
||||||
}
|
|
||||||
*/
|
|
||||||
|
|
||||||
// draw SAM sites
|
// draw SAM sites
|
||||||
ShowSAMSitesOnStrategicMap( );
|
ShowSAMSitesOnStrategicMap();
|
||||||
|
|
||||||
// draw mine icons
|
// draw mine icons
|
||||||
for( iCounter = 0; iCounter < MAX_NUMBER_OF_MINES; ++iCounter )
|
for (INT32 iCounter = 0; iCounter < MAX_NUMBER_OF_MINES; ++iCounter)
|
||||||
{
|
{
|
||||||
//BlitMineIcon( gMineLocation[ iCounter ].sSectorX, gMineLocation[ iCounter ].sSectorY );
|
BlitMineIcon(gMineStatus[iCounter].sSectorX, gMineStatus[iCounter].sSectorY);
|
||||||
BlitMineIcon( gMineStatus[ iCounter ].sSectorX, gMineStatus[ iCounter ].sSectorY );
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// if mine details filter is set
|
// if mine details filter is set
|
||||||
if( fShowMineFlag )
|
if (fShowMineFlag)
|
||||||
{
|
{
|
||||||
// show mine name/production text
|
// show mine name/production text
|
||||||
for( iCounter = 0; iCounter < MAX_NUMBER_OF_MINES; ++iCounter )
|
for (INT32 iCounter = 0; iCounter < MAX_NUMBER_OF_MINES; ++iCounter)
|
||||||
{
|
{
|
||||||
//BlitMineText( gMineLocation[ iCounter ].sSectorX, gMineLocation[ iCounter ].sSectorY );
|
BlitMineText(gMineStatus[iCounter].sSectorX, gMineStatus[iCounter].sSectorY);
|
||||||
BlitMineText( gMineStatus[ iCounter ].sSectorX, gMineStatus[ iCounter ].sSectorY );
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// draw towns names & loyalty ratings, and grey town limit borders
|
// draw towns names & loyalty ratings, and grey town limit borders
|
||||||
if( fShowTownFlag )
|
if (fShowTownFlag)
|
||||||
{
|
{
|
||||||
BlitTownGridMarkers( );
|
BlitTownGridMarkers();
|
||||||
ShowTownText( );
|
ShowTownText();
|
||||||
}
|
}
|
||||||
|
|
||||||
// draw militia icons
|
// draw militia icons
|
||||||
if( fShowMilitia )
|
if (fShowMilitia)
|
||||||
{
|
{
|
||||||
DrawTownMilitiaForcesOnMap( );
|
DrawTownMilitiaForcesOnMap();
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( is_networked //haydent (allow client to see map deployment bullseye)
|
if ((gusMapDisplayColourMode == MAP_DISPLAY_AIRSPACE || gusMapDisplayColourMode == MAP_DISPLAY_AIRSPACE_COLOURED_SAMS) && !gfInChangeArrivalSectorMode)
|
||||||
|| (( gusMapDisplayColourMode == MAP_DISPLAY_AIRSPACE || gusMapDisplayColourMode == MAP_DISPLAY_AIRSPACE_COLOURED_SAMS ) && !gfInChangeArrivalSectorMode ) )
|
|
||||||
{
|
{
|
||||||
DrawBullseye();
|
DrawBullseye();
|
||||||
}
|
}
|
||||||
|
else if (is_networked)
|
||||||
|
{
|
||||||
|
DrawBullseye();//haydent (allow client to see map deployment bullseye)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
HandleLowerLevelMapBlit( );
|
HandleLowerLevelMapBlit();
|
||||||
}
|
}
|
||||||
|
|
||||||
// show mine outlines even when viewing underground sublevels - they indicate where the mine entrances are
|
// show mine outlines even when viewing underground sublevels - they indicate where the mine entrances are
|
||||||
if ( fShowMineFlag )
|
if (fShowMineFlag)
|
||||||
{
|
{
|
||||||
// draw grey mine sector borders
|
// draw grey mine sector borders
|
||||||
BlitMineGridMarkers( );
|
BlitMineGridMarkers();
|
||||||
}
|
}
|
||||||
|
|
||||||
// do not show mercs/vehicles when airspace is ON
|
|
||||||
// commented out on a trial basis!
|
if (fShowTeamFlag)
|
||||||
// if( gusMapDisplayColourMode != MAP_DISPLAY_AIRSPACE )
|
|
||||||
{
|
{
|
||||||
if( fShowTeamFlag )
|
|
||||||
ShowTeamAndVehicles( SHOW_TEAMMATES | SHOW_VEHICLES );
|
|
||||||
else
|
|
||||||
HandleShowingOfEnemiesWithMilitiaOn( );
|
|
||||||
|
|
||||||
/*
|
|
||||||
if((fShowTeamFlag)&&(fShowVehicleFlag))
|
|
||||||
ShowTeamAndVehicles(SHOW_TEAMMATES | SHOW_VEHICLES);
|
ShowTeamAndVehicles(SHOW_TEAMMATES | SHOW_VEHICLES);
|
||||||
else if(fShowTeamFlag)
|
}
|
||||||
ShowTeamAndVehicles(SHOW_TEAMMATES);
|
else
|
||||||
else if(fShowVehicleFlag)
|
{
|
||||||
ShowTeamAndVehicles(SHOW_VEHICLES);
|
HandleShowingOfEnemiesWithMilitiaOn();
|
||||||
else
|
|
||||||
{
|
|
||||||
HandleShowingOfEnemiesWithMilitiaOn( );
|
|
||||||
}
|
|
||||||
*/
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( fShowItemsFlag )
|
|
||||||
|
if (fShowItemsFlag)
|
||||||
{
|
{
|
||||||
ShowItemsOnMap();
|
ShowItemsOnMap();
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( gusMapDisplayColourMode == MAP_DISPLAY_DISEASE )
|
|
||||||
{
|
|
||||||
ShowDiseaseOnMap( );
|
|
||||||
}
|
|
||||||
|
|
||||||
DisplayLevelString( );
|
DisplayLevelString();
|
||||||
|
|
||||||
RestoreClipRegionToFullScreen( );
|
RestoreClipRegionToFullScreen();
|
||||||
|
|
||||||
// Flugente: this function does not do anything... so I'm commenting its use out
|
return(TRUE);
|
||||||
//CheckForSoldiersWhoRetreatedIntoMilitiaHeldSectors();
|
|
||||||
|
|
||||||
return( TRUE );
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -1581,6 +1614,135 @@ BOOLEAN ShadeMapElem( INT16 sMapX, INT16 sMapY, INT32 iColor )
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
BOOLEAN ShadeMapElements(const INT32(&colorMap)[ MAXIMUM_VALID_Y_COORDINATE ][ MAXIMUM_VALID_X_COORDINATE ])
|
||||||
|
{
|
||||||
|
// get original video surface palette
|
||||||
|
HVSURFACE hSrcVSurface;
|
||||||
|
CHECKF(GetVideoSurface(&hSrcVSurface, guiBIGMAP));
|
||||||
|
UINT16 * const pOriginalPallette = hSrcVSurface->p16BPPPalette;
|
||||||
|
|
||||||
|
// Lock source buffer
|
||||||
|
UINT32 uiSrcPitchBYTES;
|
||||||
|
UINT8 *pSrcBuffer;
|
||||||
|
pSrcBuffer = LockVideoSurface(guiBIGMAP, &uiSrcPitchBYTES);
|
||||||
|
|
||||||
|
// get SAVEBUFFER
|
||||||
|
HVSURFACE hVSurface;
|
||||||
|
CHECKF(GetVideoSurface(&hVSurface, guiSAVEBUFFER));
|
||||||
|
|
||||||
|
// Lock destination buffer
|
||||||
|
UINT32 uiDestPitch;
|
||||||
|
UINT16 *pDestBuffer;
|
||||||
|
pDestBuffer = (UINT16*)LockVideoSurface(guiSAVEBUFFER, &uiDestPitch);
|
||||||
|
|
||||||
|
if (pDestBuffer == NULL)
|
||||||
|
{
|
||||||
|
return(FALSE);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
for (INT16 y = 0; y < MAXIMUM_VALID_Y_COORDINATE; ++y)
|
||||||
|
{
|
||||||
|
for (INT16 x = 0; x < MAXIMUM_VALID_X_COORDINATE; ++x)
|
||||||
|
{
|
||||||
|
const INT16 mapX = x + MINIMUM_VALID_X_COORDINATE;
|
||||||
|
const INT16 mapY = y + MINIMUM_VALID_Y_COORDINATE;
|
||||||
|
|
||||||
|
INT16 sScreenX, sScreenY;
|
||||||
|
GetScreenXYFromMapXY(mapX, mapY, &sScreenX, &sScreenY);
|
||||||
|
|
||||||
|
// compensate for original BIG_MAP blit being done at MAP_VIEW_START_X + 1
|
||||||
|
sScreenX += 1;
|
||||||
|
|
||||||
|
// compensate for original BIG_MAP blit being done at MAP_VIEW_START_X + 1
|
||||||
|
SGPRect clip;
|
||||||
|
clip.iLeft = 2 * (sScreenX - (MAP_VIEW_START_X + 1));
|
||||||
|
clip.iTop = 2 * (sScreenY - MAP_VIEW_START_Y);
|
||||||
|
clip.iRight = clip.iLeft + (2 * MAP_GRID_X);
|
||||||
|
clip.iBottom = clip.iTop + (2 * MAP_GRID_Y);
|
||||||
|
|
||||||
|
|
||||||
|
const auto iColor = colorMap[y][x];
|
||||||
|
if (iColor == MAP_SHADE_BLACK)
|
||||||
|
{
|
||||||
|
// non-airspace
|
||||||
|
sScreenY -= 1;
|
||||||
|
|
||||||
|
auto X1 = sScreenX;
|
||||||
|
auto Y1 = sScreenY;
|
||||||
|
auto X2 = sScreenX + MAP_GRID_X - 1;
|
||||||
|
auto Y2 = sScreenY + MAP_GRID_Y - 1;
|
||||||
|
#ifdef _DEBUG
|
||||||
|
if (X1 < 0)
|
||||||
|
X1 = 0;
|
||||||
|
|
||||||
|
if (X2 < 0)
|
||||||
|
continue;
|
||||||
|
//return(FALSE);
|
||||||
|
|
||||||
|
if (Y2 < 0)
|
||||||
|
continue;
|
||||||
|
//return(FALSE);
|
||||||
|
|
||||||
|
if (Y1 < 0)
|
||||||
|
Y1 = 0;
|
||||||
|
|
||||||
|
if (X2 >= hVSurface->usWidth)
|
||||||
|
X2 = hVSurface->usWidth - 1;
|
||||||
|
|
||||||
|
if (Y2 >= hVSurface->usHeight)
|
||||||
|
Y2 = hVSurface->usHeight - 1;
|
||||||
|
|
||||||
|
if (X1 >= hVSurface->usWidth)
|
||||||
|
continue;
|
||||||
|
//return(FALSE);
|
||||||
|
|
||||||
|
if (Y1 >= hVSurface->usHeight)
|
||||||
|
continue;
|
||||||
|
//return(FALSE);
|
||||||
|
|
||||||
|
if ((X2 - X1) <= 0)
|
||||||
|
continue;
|
||||||
|
//return(FALSE);
|
||||||
|
|
||||||
|
if ((Y2 - Y1) <= 0)
|
||||||
|
continue;
|
||||||
|
//return(FALSE);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
SGPRect area;
|
||||||
|
area.iTop = Y1;
|
||||||
|
area.iBottom = Y2;
|
||||||
|
area.iLeft = X1;
|
||||||
|
area.iRight = X2;
|
||||||
|
|
||||||
|
|
||||||
|
// Now we have the video object and surface, call the shadow function
|
||||||
|
Blt16BPPBufferShadowRect(pDestBuffer, uiDestPitch, &area);
|
||||||
|
}
|
||||||
|
else if (iColor < MAP_SHADE_MAX)
|
||||||
|
{
|
||||||
|
// Set palette for shading
|
||||||
|
hSrcVSurface->p16BPPPalette = pMapPalette[iColor];
|
||||||
|
Blt8BPPDataTo16BPPBufferHalfRect(pDestBuffer, uiDestPitch, hSrcVSurface, pSrcBuffer, uiSrcPitchBYTES, sScreenX, sScreenY, &clip);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// unlock source and dest buffers
|
||||||
|
UnLockVideoSurface(guiBIGMAP);
|
||||||
|
UnLockVideoSurface(guiSAVEBUFFER);
|
||||||
|
|
||||||
|
// restore original palette
|
||||||
|
CHECKF(GetVideoSurface(&hSrcVSurface, guiBIGMAP));
|
||||||
|
hSrcVSurface->p16BPPPalette = pOriginalPallette;
|
||||||
|
|
||||||
|
return (TRUE);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
void InitializeMilitiaPopup(void)
|
void InitializeMilitiaPopup(void)
|
||||||
{
|
{
|
||||||
UINT16 xVal = 330 + xResOffset;
|
UINT16 xVal = 330 + xResOffset;
|
||||||
|
|||||||
Reference in New Issue
Block a user