diff --git a/Strategic/Map Screen Helicopter.cpp b/Strategic/Map Screen Helicopter.cpp
index 5b2de161..d3d0b1e8 100644
--- a/Strategic/Map Screen Helicopter.cpp
+++ b/Strategic/Map Screen Helicopter.cpp
@@ -196,6 +196,9 @@ INT16 sRefuelSectorY[ MAX_NUMBER_OF_REFUEL_SITES ];
BOOLEAN fRefuelingSiteHidden[ MAX_NUMBER_OF_REFUEL_SITES ];
+// heli tile index no in tileset
+INT32 iRefuelHeliTileIndex[ MAX_NUMBER_OF_REFUEL_SITES ];
+
// heli graphics grid no
INT32 iRefuelHeliGridNo[ MAX_NUMBER_OF_REFUEL_SITES ];
// skyrider standing grid no
@@ -216,6 +219,7 @@ typedef enum
HELISITE_ELEMENT_REFUELSECTOR_X,
HELISITE_ELEMENT_REFUELSECTOR_Y,
HELISITE_ELEMENT_REFUEL_HIDDEN,
+ HELISITE_ELEMENT_REFUEL_HELI_TILE_INDEX,
HELISITE_ELEMENT_REFUEL_HELI_GRIDNO,
HELISITE_ELEMENT_REFUEL_SKYRIDER_GRIDNO,
} HELISITE_PARSE_STAGE;
@@ -226,6 +230,7 @@ typedef struct
INT16 refuelSectorX;
INT16 refuelSectorY;
BOOLEAN refuelHidden;
+ INT32 refuelHeliTileIndex;
INT32 refuelHeliGridNo;
INT32 refuelSkyriderGridNo;
} heliInfo;
@@ -261,7 +266,8 @@ helisiteStartElementHandle(void *userData, const XML_Char *name, const XML_Char
memset( sRefuelSectorX, 0, sizeof(sRefuelSectorX) );
memset( sRefuelSectorY, 0, sizeof(sRefuelSectorY) );
- memset( fRefuelingSiteHidden, 0, sizeof(fRefuelingSiteHidden) );
+ memset( fRefuelingSiteHidden, 0, sizeof(fRefuelingSiteHidden) );
+ memset( iRefuelHeliTileIndex, 0, sizeof(iRefuelHeliTileIndex) );
memset( iRefuelHeliGridNo, 0, sizeof(iRefuelHeliGridNo) );
memset( iRefuelSkyriderGridNo, 0, sizeof(iRefuelSkyriderGridNo) );
@@ -300,6 +306,11 @@ helisiteStartElementHandle(void *userData, const XML_Char *name, const XML_Char
pData->curElement = HELISITE_ELEMENT_REFUEL_HIDDEN;
pData->maxReadDepth++; //we are not skipping this element
}
+ else if(strcmp(name, "refuelHeliTileIndex") == 0 && pData->curElement == HELISITE_ELEMENT_REFUEL)
+ {
+ pData->curElement = HELISITE_ELEMENT_REFUEL_HELI_TILE_INDEX;
+ pData->maxReadDepth++; //we are not skipping this element
+ }
else if(strcmp(name, "refuelHeliGridNo") == 0 && pData->curElement == HELISITE_ELEMENT_REFUEL)
{
pData->curElement = HELISITE_ELEMENT_REFUEL_HELI_GRIDNO;
@@ -354,6 +365,7 @@ helisiteEndElementHandle(void *userData, const XML_Char *name)
sRefuelSectorX [ pData->curHeliInfo.uiIndex ] = pData->curHeliInfo.refuelSectorX;
sRefuelSectorY [ pData->curHeliInfo.uiIndex ] = pData->curHeliInfo.refuelSectorY;
fRefuelingSiteHidden [ pData->curHeliInfo.uiIndex ] = pData->curHeliInfo.refuelHidden;
+ iRefuelHeliTileIndex [ pData->curHeliInfo.uiIndex ] = pData->curHeliInfo.refuelHeliTileIndex;
iRefuelHeliGridNo [ pData->curHeliInfo.uiIndex ] = pData->curHeliInfo.refuelHeliGridNo;
iRefuelSkyriderGridNo [ pData->curHeliInfo.uiIndex ] = pData->curHeliInfo.refuelSkyriderGridNo;
}
@@ -394,6 +406,12 @@ helisiteEndElementHandle(void *userData, const XML_Char *name)
pData->curHeliInfo.refuelHidden = (BOOLEAN)atol(pData->szCharData);
}
+ else if(strcmp(name, "refuelHeliTileIndex") == 0 && pData->curElement == HELISITE_ELEMENT_REFUEL_HELI_TILE_INDEX )
+ {
+ pData->curElement = HELISITE_ELEMENT_REFUEL;
+
+ pData->curHeliInfo.refuelHeliTileIndex = atol(pData->szCharData);
+ }
else if(strcmp(name, "refuelHeliGridNo") == 0 && pData->curElement == HELISITE_ELEMENT_REFUEL_HELI_GRIDNO )
{
pData->curElement = HELISITE_ELEMENT_REFUEL;
@@ -504,6 +522,8 @@ BOOLEAN WriteInInfo(STR fileName)
FilePrintf(hFile,"\t\t\t%d\r\n", fRefuelingSiteHidden[cnt] );
+ FilePrintf(hFile,"\t\t\t%d\r\n", iRefuelHeliTileIndex[cnt] );
+
FilePrintf(hFile,"\t\t\t%d\r\n", iRefuelHeliGridNo[cnt] );
FilePrintf(hFile,"\t\t\t%d\r\n", iRefuelSkyriderGridNo[cnt] );
@@ -2263,74 +2283,75 @@ BOOLEAN CanHelicopterTakeOff( void )
return( FALSE );
}
-void AddHeliPeice( INT32 sGridNo, UINT16 sOStruct )
+void AddHeliPiece( INT32 iGridNo, UINT16 sOStruct )
{
UINT16 usDummy;
// ATE: Check first if already exists....
- if ( !TypeExistsInStructLayer( sGridNo, sOStruct, &usDummy ) )
+ if ( !TypeExistsInStructLayer( iGridNo, sOStruct, &usDummy ) )
{
// place in the world
- AddStructToTail( sGridNo, sOStruct );
+ AddStructToTail( iGridNo, sOStruct );
}
}
void AddHelicopterToMaps( BOOLEAN fAdd, UINT8 ubSite )
{
- INT32 sGridNo = iRefuelHeliGridNo[ ubSite ];
- INT16 sOStruct = 0;
+ INT32 iGridNo = iRefuelHeliGridNo[ ubSite ];
+ INT32 iTileIndexNo = iRefuelHeliTileIndex[ ubSite ];
+ //INT16 sOStruct = 0;
INT16 sGridX, sGridY;
INT16 sCentreGridX, sCentreGridY;
// find out what slot it is by which site
- if( ubSite == 0 )
- {
- // drassen
- sOStruct = FIRSTOSTRUCT1;
- }
- else
- {
- // estoni
- sOStruct = FOURTHOSTRUCT1;
- }
+ //if( ubSite == 0 )
+ //{
+ // // drassen
+ // sOStruct = FIRSTOSTRUCT1;
+ //}
+ //else
+ //{
+ // // estoni
+ // sOStruct = FOURTHOSTRUCT1;
+ //}
// are we adding or taking away
if( fAdd )
{
- AddHeliPeice( sGridNo, sOStruct );
- AddHeliPeice( sGridNo, ( UINT16 )( sOStruct + 1));
- AddHeliPeice( ( sGridNo - 800 ), ( UINT16 )( sOStruct + 2 ));
- AddHeliPeice( sGridNo, ( UINT16 )(sOStruct + 3 ));
- AddHeliPeice( sGridNo, ( UINT16 )(sOStruct + 4));
- AddHeliPeice( ( sGridNo - 800 ), ( UINT16 )(sOStruct + 5));
+ AddHeliPiece( iGridNo, ( UINT16 ) iTileIndexNo ); // AddHeliPiece( iGridNo, sOStruct );
+ AddHeliPiece( iGridNo, ( UINT16 )( iTileIndexNo + 1 ) );
+ AddHeliPiece( ( iGridNo - WORLD_ROWS * 5 ), ( UINT16 )( iTileIndexNo + 2 ) ); // ( iGridNo - 800 )
+ AddHeliPiece( iGridNo, ( UINT16 )( iTileIndexNo + 3 ) );
+ AddHeliPiece( iGridNo, ( UINT16 )( iTileIndexNo + 4 ) );
+ AddHeliPiece( ( iGridNo - WORLD_ROWS * 5 ), ( UINT16 )( iTileIndexNo + 5 ) ); // ( iGridNo - 800 )
InvalidateWorldRedundency();
SetRenderFlags( RENDER_FLAG_FULL );
// ATE: If any mercs here, bump them off!
- ConvertGridNoToXY( sGridNo, &sCentreGridX, &sCentreGridY );
+ ConvertGridNoToXY( iGridNo, &sCentreGridX, &sCentreGridY );
for( sGridY = sCentreGridY - 5; sGridY < sCentreGridY + 5; sGridY++ )
{
for( sGridX = sCentreGridX - 5; sGridX < sCentreGridX + 5; sGridX++ )
{
- sGridNo = MAPROWCOLTOPOS( sGridY, sGridX );
+ iGridNo = MAPROWCOLTOPOS( sGridY, sGridX );
- BumpAnyExistingMerc( sGridNo );
+ BumpAnyExistingMerc( iGridNo );
}
}
}
else
{
// remove from the world
- RemoveStruct( iRefuelHeliGridNo[ ubSite ], ( UINT16 )(sOStruct ));
- RemoveStruct( iRefuelHeliGridNo[ ubSite ], ( UINT16 )(sOStruct + 1 ));
- RemoveStruct( iRefuelHeliGridNo[ ubSite ] - 800, ( UINT16 )(sOStruct + 2));
- RemoveStruct( iRefuelHeliGridNo[ ubSite ], ( UINT16 )(sOStruct + 3));
- RemoveStruct( iRefuelHeliGridNo[ ubSite ], ( UINT16 )(sOStruct + 4));
- RemoveStruct( iRefuelHeliGridNo[ ubSite ] - 800, ( UINT16 )(sOStruct +5));
+ RemoveStruct( iGridNo, ( UINT16 )iTileIndexNo );
+ RemoveStruct( iGridNo, ( UINT16 )( iTileIndexNo + 1 ) );
+ RemoveStruct( ( iGridNo - WORLD_ROWS * 5 ), ( UINT16 )( iTileIndexNo + 2 ) ); // ( iGridNo - 800 )
+ RemoveStruct( iGridNo, ( UINT16 )( iTileIndexNo + 3 ) );
+ RemoveStruct( iGridNo, ( UINT16 )( iTileIndexNo + 4 ) );
+ RemoveStruct( ( iGridNo - WORLD_ROWS * 5 ), ( UINT16 )( iTileIndexNo + 5 ) ); // ( iGridNo - 800 )
InvalidateWorldRedundency();
SetRenderFlags( RENDER_FLAG_FULL );
diff --git a/Strategic/Map Screen Helicopter.h b/Strategic/Map Screen Helicopter.h
index cc0b22bf..87a12441 100644
--- a/Strategic/Map Screen Helicopter.h
+++ b/Strategic/Map Screen Helicopter.h
@@ -128,6 +128,7 @@ extern BOOLEAN fShowCambriaHospitalHighLight;
extern INT32 iTotalAccumulatedCostByPlayer;
extern UINT32 guiTimeOfLastSkyriderMonologue;
extern BOOLEAN fSkyRiderSetUp;
+extern UINT8 NUMBER_OF_REFUEL_SITES;
extern BOOLEAN fRefuelingSiteAvailable[ MAX_NUMBER_OF_REFUEL_SITES ];
extern BOOLEAN fRefuelingSiteHidden[ MAX_NUMBER_OF_REFUEL_SITES ];
diff --git a/Strategic/Map Screen Interface TownMine Info.cpp b/Strategic/Map Screen Interface TownMine Info.cpp
index f56da592..57d79f6f 100644
--- a/Strategic/Map Screen Interface TownMine Info.cpp
+++ b/Strategic/Map Screen Interface TownMine Info.cpp
@@ -701,52 +701,53 @@ void AddCommonInfoToBox(void)
{
CHAR16 wString[ 64 ];
UINT32 hStringHandle = 0;
- BOOLEAN fHiddenSite = FALSE;
+ BOOLEAN fKnownSite = FALSE;
UINT8 ubMilitiaTotal = 0;
UINT8 ubNumEnemies;
UINT16 usSectorValue = 0;
// get the sector value
- usSectorValue = SECTOR( bCurrentTownMineSectorX, bCurrentTownMineSectorY );
+ usSectorValue = SECTOR( bCurrentTownMineSectorX, bCurrentTownMineSectorY );
- // check for hidden town
- if( !gfHiddenTown[ GetTownIdForSector( bCurrentTownMineSectorX, bCurrentTownMineSectorY ) ] )
- fHiddenSite = TRUE;
+ BOOLEAN fVisited = (SectorInfo[ usSectorValue ].uiFlags & SF_ALREADY_VISITED);
+ UINT8 ubTownId = GetTownIdForSector( bCurrentTownMineSectorX, bCurrentTownMineSectorY );
+
+ // visited sector check
+ if ( fVisited )
+ fKnownSite = TRUE;
+
+ // known town check, exclude TownId 0 for non-town sectors
+ else if( gfHiddenTown[ ubTownId ] && ubTownId != 0 )
+ fKnownSite = TRUE;
- // check for unknown SAM Site
+ // known SAM Site check
else
{
for (UINT16 x=0; x < MAX_NUMBER_OF_SAMS; x++)
{
- // SAM Site 4 in Meduna is within town limits, so it's always known
- if ( usSectorValue == SEC_N4 && x == 3)
- fHiddenSite = FALSE;
-
- else if ( pSamList[x] == usSectorValue )
+ if ( pSamList[x] == usSectorValue )
{
- if ( !fSamSiteFound[ x ] )
- {
- fHiddenSite = TRUE;
- }
+ if ( fSamSiteFound[ x ] )
+ fKnownSite = TRUE;
}
}
}
/*// ABOVE GROUND HARDCODED
- if( ubSectorID == SEC_N4 && fSamSiteFound[ SAM_SITE_FOUR ] )
- switch( SECTOR( bCurrentTownMineSectorX, bCurrentTownMineSectorY ) )
+ fKnownSite = TRUE;
+ switch( usSectorValue )
{
case SEC_D2: //Chitzena SAM
if( !fSamSiteFound[ SAM_SITE_ONE ] )
- fHiddenSite = TRUE;
+ fKnownSite = FALSE;
break;
case SEC_D15: //Drassen SAM
if( !fSamSiteFound[ SAM_SITE_TWO ] )
- fHiddenSite = TRUE;
+ fKnownSite = FALSE;
break;
case SEC_I8: //Cambria SAM
if( !fSamSiteFound[ SAM_SITE_THREE ] )
- fHiddenSite = TRUE;
+ fKnownSite = FALSE;
break;
// SAM Site 4 in Meduna is within town limits, so it's always controllable
default:
@@ -756,7 +757,7 @@ void AddCommonInfoToBox(void)
// in sector where militia can be trained,
// control of the sector matters, display who controls this sector. Map brightness no longer gives this!
- if ( MilitiaTrainingAllowedInSector( bCurrentTownMineSectorX, bCurrentTownMineSectorY, 0 ) && !fHiddenSite )
+ if ( MilitiaTrainingAllowedInSector( bCurrentTownMineSectorX, bCurrentTownMineSectorY, 0 ) && fKnownSite )
{
// controlled:
swprintf( wString, L"%s:", pwMiscSectorStrings[ 4 ] );
@@ -799,7 +800,7 @@ void AddCommonInfoToBox(void)
// Sector contains Militia training facility?
for (UINT8 ubCounter = 0; ubCounter < MAX_NUM_FACILITY_TYPES; ubCounter++)
{
- if (gFacilityLocations[SECTOR(bCurrentTownMineSectorX, bCurrentTownMineSectorY)][ubCounter].fFacilityHere)
+ if (gFacilityLocations[usSectorValue][ubCounter].fFacilityHere)
{
if (gFacilityTypes[ubCounter].ubMilitiaTrainersAllowed)
{
@@ -810,7 +811,7 @@ void AddCommonInfoToBox(void)
if (fMilitiaTrainingAllowed)
{
// Show percent completed
- swprintf( wString, L"%d%%%%", SectorInfo[ SECTOR( bCurrentTownMineSectorX, bCurrentTownMineSectorY ) ].ubMilitiaTrainingPercentDone );
+ swprintf( wString, L"%d%%%%", SectorInfo[ usSectorValue ].ubMilitiaTrainingPercentDone );
AddSecondColumnMonoString( &hStringHandle, wString );
}
else
@@ -826,7 +827,7 @@ void AddCommonInfoToBox(void)
// Sector contains Mobile training facility?
for (UINT8 ubCounter = 0; ubCounter < MAX_NUM_FACILITY_TYPES; ubCounter++)
{
- if (gFacilityLocations[SECTOR(bCurrentTownMineSectorX, bCurrentTownMineSectorY)][ubCounter].fFacilityHere)
+ if (gFacilityLocations[usSectorValue][ubCounter].fFacilityHere)
{
if (gFacilityTypes[ubCounter].ubMobileMilitiaTrainersAllowed)
{
@@ -838,7 +839,7 @@ void AddCommonInfoToBox(void)
if (fMobileTrainingAllowed)
{
// Show percentage completed
- swprintf( wString, L"%d%%%%", SectorInfo[ SECTOR( bCurrentTownMineSectorX, bCurrentTownMineSectorY ) ].ubMobileMilitiaTrainingPercentDone );
+ swprintf( wString, L"%d%%%%", SectorInfo[ usSectorValue ].ubMobileMilitiaTrainingPercentDone );
AddSecondColumnMonoString( &hStringHandle, wString );
}
else