Added icons for enemy tanks in strategic map.

Requires GameDir >= r2062.

git-svn-id: https://ja2svn.mooo.com/source/ja2/trunk/GameSource/ja2_v1.13/Build@7314 3b4a5df2-a311-0410-b5c6-a8a6f20db521
This commit is contained in:
Flugente
2014-07-07 21:59:47 +00:00
parent 1736d546d6
commit 2f1dcdaa47
3 changed files with 145 additions and 134 deletions
+103 -134
View File
@@ -110,17 +110,19 @@ UINT16 MAP_LEVEL_STRING_Y;
// "Boxes" Icons // "Boxes" Icons
#define SMALL_YELLOW_BOX 0 #define SMALL_YELLOW_BOX 0
#define BIG_YELLOW_BOX 1 #define BIG_YELLOW_BOX 1
#define SMALL_DULL_YELLOW_BOX 2 #define SMALL_DULL_YELLOW_BOX 2
#define BIG_DULL_YELLOW_BOX 3 #define BIG_DULL_YELLOW_BOX 3
#define SMALL_WHITE_BOX 4 #define SMALL_WHITE_BOX 4
#define BIG_WHITE_BOX 5 #define BIG_WHITE_BOX 5
#define SMALL_RED_BOX 6 #define SMALL_RED_BOX 6
#define BIG_RED_BOX 7 #define BIG_RED_BOX 7
#define SMALL_QUESTION_MARK 8 #define SMALL_QUESTION_MARK 8
#define BIG_QUESTION_MARK 9 #define BIG_QUESTION_MARK 9
#define VIP_SYMBOL 10
#define ENEMY_TANK_BIG 11
#define MERC_ICONS_PER_LINE 6 #define MERC_ICONS_PER_LINE 6
#define ROWS_PER_SECTOR 5 #define ROWS_PER_SECTOR 5
// Arrow Offsets // Arrow Offsets
#define UP_X 13 #define UP_X 13
@@ -553,7 +555,7 @@ void MilitiaBoxMaskBtnCallback(MOUSE_REGION * pRegion, INT32 iReason );
// display potential path, yes or no? // display potential path, yes or no?
void DisplayThePotentialPathForHelicopter(INT16 sMapX, INT16 sMapY ); void DisplayThePotentialPathForHelicopter(INT16 sMapX, INT16 sMapY );
void ShowEnemiesInSector( INT16 sSectorX, INT16 sSectorY, INT16 sNumberOfEnemies, UINT8 ubIconPosition ); void ShowEnemiesInSector( INT16 sSectorX, INT16 sSectorY, INT16 sNumberOfEnemies, UINT16 usNumTanks, UINT8 ubIconPosition );
void ShowUncertainNumberEnemiesInSector( INT16 sSectorX, INT16 sSectorY ); void ShowUncertainNumberEnemiesInSector( INT16 sSectorX, INT16 sSectorY );
void HandleShowingOfEnemyForcesInSector( INT16 sSectorX, INT16 sSectorY, INT8 bSectorZ, UINT8 ubIconPosition ); void HandleShowingOfEnemyForcesInSector( INT16 sSectorX, INT16 sSectorY, INT8 bSectorZ, UINT8 ubIconPosition );
@@ -1114,14 +1116,13 @@ void DrawTownLabels(STR16 pString, STR16 pStringA, UINT16 usFirstX, UINT16 usFir
// "on duty" includes mercs inside vehicles // "on duty" includes mercs inside vehicles
INT32 ShowOnDutyTeam( INT16 sMapX, INT16 sMapY ) INT32 ShowOnDutyTeam( INT16 sMapX, INT16 sMapY )
{ {
UINT8 ubCounter = 0, ubIconPosition = 0; UINT8 ubCounter = 0, ubIconPosition = 0;
HVOBJECT hIconHandle; HVOBJECT hIconHandle;
SOLDIERTYPE *pSoldier = NULL; SOLDIERTYPE *pSoldier = NULL;
GetVideoObject(&hIconHandle, guiCHARICONS);
GetVideoObject(&hIconHandle, guiCHARICONS); // run through list
// run through list
while(gCharactersList[ubCounter].fValid) while(gCharactersList[ubCounter].fValid)
{ {
pSoldier = MercPtrs[ gCharactersList[ ubCounter ].usSolID ]; pSoldier = MercPtrs[ gCharactersList[ ubCounter ].usSolID ];
@@ -1135,11 +1136,12 @@ INT32 ShowOnDutyTeam( INT16 sMapX, INT16 sMapY )
( !PlayerIDGroupInMotion( pSoldier->ubGroupID ) ) ) ( !PlayerIDGroupInMotion( pSoldier->ubGroupID ) ) )
{ {
DrawMapBoxIcon( hIconHandle, SMALL_YELLOW_BOX, sMapX, sMapY, ubIconPosition ); DrawMapBoxIcon( hIconHandle, SMALL_YELLOW_BOX, sMapX, sMapY, ubIconPosition );
ubIconPosition++; ++ubIconPosition;
} }
ubCounter++; ++ubCounter;
} }
return ubIconPosition; return ubIconPosition;
} }
@@ -1147,21 +1149,20 @@ INT32 ShowOnDutyTeam( INT16 sMapX, INT16 sMapY )
INT32 ShowAssignedTeam(INT16 sMapX, INT16 sMapY, INT32 iCount) INT32 ShowAssignedTeam(INT16 sMapX, INT16 sMapY, INT32 iCount)
{ {
UINT8 ubCounter, ubIconPosition; UINT8 ubCounter, ubIconPosition;
HVOBJECT hIconHandle; HVOBJECT hIconHandle;
SOLDIERTYPE *pSoldier = NULL; SOLDIERTYPE *pSoldier = NULL;
GetVideoObject(&hIconHandle, guiCHARICONS);
GetVideoObject(&hIconHandle, guiCHARICONS);
ubCounter=0; ubCounter=0;
// run through list // run through list
ubIconPosition = ( UINT8 ) iCount; ubIconPosition = ( UINT8 ) iCount;
while(gCharactersList[ubCounter].fValid) while(gCharactersList[ubCounter].fValid)
{ {
pSoldier = MercPtrs[ gCharactersList[ ubCounter ].usSolID ]; pSoldier = MercPtrs[ gCharactersList[ ubCounter ].usSolID ];
// given number of on duty members, find number of assigned chars // given number of on duty members, find number of assigned chars
// start at beginning of list, look for people who are in sector and assigned // start at beginning of list, look for people who are in sector and assigned
if( !( pSoldier->flags.uiStatusFlags & SOLDIER_VEHICLE ) && if( !( pSoldier->flags.uiStatusFlags & SOLDIER_VEHICLE ) &&
( pSoldier->sSectorX == sMapX) && ( pSoldier->sSectorX == sMapX) &&
@@ -1177,28 +1178,28 @@ INT32 ShowAssignedTeam(INT16 sMapX, INT16 sMapY, INT32 iCount)
if ( !fShowAircraftFlag || ( pSoldier->bAssignment != VEHICLE ) || ( pSoldier->iVehicleId != iHelicopterVehicleId ) ) if ( !fShowAircraftFlag || ( pSoldier->bAssignment != VEHICLE ) || ( pSoldier->iVehicleId != iHelicopterVehicleId ) )
{ {
DrawMapBoxIcon( hIconHandle, SMALL_DULL_YELLOW_BOX, sMapX, sMapY, ubIconPosition ); DrawMapBoxIcon( hIconHandle, SMALL_DULL_YELLOW_BOX, sMapX, sMapY, ubIconPosition );
ubIconPosition++; ++ubIconPosition;
} }
} }
ubCounter++; ++ubCounter;
} }
return ubIconPosition; return ubIconPosition;
} }
INT32 ShowVehicles(INT16 sMapX, INT16 sMapY, INT32 iCount) INT32 ShowVehicles(INT16 sMapX, INT16 sMapY, INT32 iCount)
{ {
UINT8 ubCounter, ubIconPosition; UINT8 ubCounter, ubIconPosition;
HVOBJECT hIconHandle; HVOBJECT hIconHandle;
SOLDIERTYPE *pVehicleSoldier; SOLDIERTYPE *pVehicleSoldier;
GetVideoObject(&hIconHandle, guiCHARICONS);
GetVideoObject(&hIconHandle, guiCHARICONS);
ubCounter=0; ubCounter=0;
ubIconPosition = (UINT8) iCount; ubIconPosition = (UINT8) iCount;
// run through list of vehicles // run through list of vehicles
while( ubCounter < ubNumberOfVehicles ) while( ubCounter < ubNumberOfVehicles )
{ {
// skip the chopper, it has its own icon and displays in airspace mode // skip the chopper, it has its own icon and displays in airspace mode
@@ -1219,32 +1220,54 @@ INT32 ShowVehicles(INT16 sMapX, INT16 sMapY, INT32 iCount)
if ( pVehicleSoldier->bTeam == gbPlayerNum ) if ( pVehicleSoldier->bTeam == gbPlayerNum )
{ {
DrawMapBoxIcon( hIconHandle, SMALL_WHITE_BOX, sMapX, sMapY, ubIconPosition ); DrawMapBoxIcon( hIconHandle, SMALL_WHITE_BOX, sMapX, sMapY, ubIconPosition );
ubIconPosition++; ++ubIconPosition;
} }
} }
} }
} }
} }
ubCounter++; ++ubCounter;
} }
return ubIconPosition; return ubIconPosition;
} }
void ShowEnemiesInSector( INT16 sSectorX, INT16 sSectorY, INT16 sNumberOfEnemies, UINT8 ubIconPosition ) void ShowEnemiesInSector( INT16 sSectorX, INT16 sSectorY, INT16 sNumberOfEnemies, UINT16 usNumTanks, UINT8 ubIconPosition )
{ {
HVOBJECT hIconHandle; HVOBJECT hIconHandle;
UINT8 ubEnemy = 0; UINT8 ubEnemy = 0;
// get the video object // get the video object
GetVideoObject(&hIconHandle, guiCHARICONS); GetVideoObject(&hIconHandle, guiCHARICONS);
for( ubEnemy = 0; ubEnemy < sNumberOfEnemies; ubEnemy++ ) // Flugente: if we display tanks, we need to know that for several rows
INT16 secondtankrowstart = -1;
for( ubEnemy = 0; ubEnemy < sNumberOfEnemies; ++ubEnemy )
{ {
DrawMapBoxIcon( hIconHandle, SMALL_RED_BOX, sSectorX, sSectorY, ubIconPosition ); // Flugente: the tank icon has is 4 icons wide and 2 rows high, thus this odd code bit
ubIconPosition++; // if we want to display a tank and have not yet done so, pick the first position that still has enough space to the right
if ( usNumTanks && secondtankrowstart < 0 && ( ubIconPosition % MERC_ICONS_PER_LINE ) < 3 )
{
DrawMapBoxIcon( hIconHandle, ENEMY_TANK_BIG, sSectorX, sSectorY, ubIconPosition );
secondtankrowstart = ubIconPosition + 6;
ubIconPosition += 4;
}
// if this is the second row of a tank, don't draw anything
else if ( usNumTanks && secondtankrowstart > -1 && ubIconPosition == secondtankrowstart )
{
// for now display only one tank icon
usNumTanks = 0;
ubIconPosition += 4;
ubEnemy = max( 0, ubEnemy - 1);
}
else
{
DrawMapBoxIcon( hIconHandle, SMALL_RED_BOX, sSectorX, sSectorY, ubIconPosition );
++ubIconPosition;
}
} }
} }
@@ -4881,8 +4904,6 @@ void RemoveMilitiaPopUpBox( void )
DeleteVideoObjectFromIndex( guiMilitiaMaps ); DeleteVideoObjectFromIndex( guiMilitiaMaps );
DeleteVideoObjectFromIndex( guiMilitiaSectorHighLight ); DeleteVideoObjectFromIndex( guiMilitiaSectorHighLight );
DeleteVideoObjectFromIndex( guiMilitiaSectorOutline ); DeleteVideoObjectFromIndex( guiMilitiaSectorOutline );
return;
} }
BOOLEAN DrawMilitiaPopUpBox( void ) BOOLEAN DrawMilitiaPopUpBox( void )
@@ -5011,7 +5032,7 @@ void RenderIconsPerSectorForSelectedTown( void )
INT32 iTotalNumberOfTroops = 0; INT32 iTotalNumberOfTroops = 0;
INT32 iCurrentTroopIcon = 0; INT32 iCurrentTroopIcon = 0;
HVOBJECT hVObject; HVOBJECT hVObject;
INT32 iCurrentIcon = 0; UINT16 usIconValue = 0;
INT16 sX, sY; INT16 sX, sY;
CHAR16 sString[ 32 ]; CHAR16 sString[ 32 ];
INT16 sSectorX = 0, sSectorY = 0; INT16 sSectorX = 0, sSectorY = 0;
@@ -5024,7 +5045,7 @@ void RenderIconsPerSectorForSelectedTown( void )
GetVideoObject( &hVObject, guiMilitia ); GetVideoObject( &hVObject, guiMilitia );
// render icons for map // render icons for map
for( iCounter = 0; iCounter < 36; iCounter++ ) for ( iCounter = 0; iCounter < MILITIA_BOX_ROWS * MILITIA_BOX_ROWS; ++iCounter )
{ {
// grab current sector value // grab current sector value
sCurrentSectorValue = sBaseSectorValue + ( ( iCounter % MILITIA_BOX_ROWS ) + ( iCounter / MILITIA_BOX_ROWS ) * ( 16 ) ); sCurrentSectorValue = sBaseSectorValue + ( ( iCounter % MILITIA_BOX_ROWS ) + ( iCounter / MILITIA_BOX_ROWS ) * ( 16 ) );
@@ -5075,26 +5096,24 @@ void RenderIconsPerSectorForSelectedTown( void )
{ {
sX = ( iCurrentTroopIcon % POPUP_MILITIA_ICONS_PER_ROW ) * MEDIUM_MILITIA_ICON_SPACING + MAP_MILITIA_BOX_POS_X + MAP_MILITIA_MAP_X + ( ( iCounter % MILITIA_BOX_ROWS ) * MILITIA_BOX_BOX_WIDTH ) + 3; sX = ( iCurrentTroopIcon % POPUP_MILITIA_ICONS_PER_ROW ) * MEDIUM_MILITIA_ICON_SPACING + MAP_MILITIA_BOX_POS_X + MAP_MILITIA_MAP_X + ( ( iCounter % MILITIA_BOX_ROWS ) * MILITIA_BOX_BOX_WIDTH ) + 3;
sY = ( iCurrentTroopIcon / POPUP_MILITIA_ICONS_PER_ROW ) * ( MEDIUM_MILITIA_ICON_SPACING ) + MAP_MILITIA_BOX_POS_Y + MAP_MILITIA_MAP_Y + ( ( iCounter / MILITIA_BOX_ROWS ) * MILITIA_BOX_BOX_HEIGHT ) + 3; sY = ( iCurrentTroopIcon / POPUP_MILITIA_ICONS_PER_ROW ) * ( MEDIUM_MILITIA_ICON_SPACING ) + MAP_MILITIA_BOX_POS_Y + MAP_MILITIA_MAP_Y + ( ( iCounter / MILITIA_BOX_ROWS ) * MILITIA_BOX_BOX_HEIGHT ) + 3;
if( iCurrentTroopIcon < iNumberOfGreens ) // get the offset further into the .sti
if ( iCurrentTroopIcon < iNumberOfGreens )
{ {
iCurrentIcon = 8; usIconValue = 8;
} }
else if( iCurrentTroopIcon < iNumberOfGreens + iNumberOfRegulars ) else if ( iCurrentTroopIcon < iNumberOfGreens + iNumberOfRegulars )
{ {
iCurrentIcon = 9; usIconValue = 9;
} }
else else
{ {
iCurrentIcon = 10; usIconValue = 10;
} }
BltVideoObject( FRAME_BUFFER, hVObject, ( UINT16 )( iCurrentIcon ), sX, sY, VO_BLT_SRCTRANSPARENCY, NULL ); BltVideoObject( FRAME_BUFFER, hVObject, usIconValue, sX, sY, VO_BLT_SRCTRANSPARENCY, NULL );
} }
} }
return;
} }
@@ -5212,16 +5231,14 @@ void CreateDestroyMilitiaSectorButtons( void )
HVOBJECT hVObject; HVOBJECT hVObject;
ETRLEObject *pTrav; ETRLEObject *pTrav;
if( sOldSectorValue == sSectorMilitiaMapSector && fShowMilitia && sSelectedMilitiaTown && !fCreated && sSectorMilitiaMapSector != -1 ) if( sOldSectorValue == sSectorMilitiaMapSector && fShowMilitia && sSelectedMilitiaTown && !fCreated && sSectorMilitiaMapSector != -1 )
{ {
fCreated = TRUE; fCreated = TRUE;
// given sector..place down the 3 buttons // given sector..place down the 3 buttons
for( iCounter = 0; iCounter < 3; iCounter++ ) for( iCounter = 0; iCounter < 3; ++iCounter )
{ {
// set screen x and y positions // set screen x and y positions
sX = MAP_MILITIA_BOX_POS_X + MAP_MILITIA_MAP_X + ( ( sSectorMilitiaMapSector % MILITIA_BOX_ROWS ) * MILITIA_BOX_BOX_WIDTH ); sX = MAP_MILITIA_BOX_POS_X + MAP_MILITIA_MAP_X + ( ( sSectorMilitiaMapSector % MILITIA_BOX_ROWS ) * MILITIA_BOX_BOX_WIDTH );
sY = MAP_MILITIA_BOX_POS_Y + MAP_MILITIA_MAP_Y + ( ( sSectorMilitiaMapSector / MILITIA_BOX_ROWS ) * MILITIA_BOX_BOX_HEIGHT ); sY = MAP_MILITIA_BOX_POS_Y + MAP_MILITIA_MAP_Y + ( ( sSectorMilitiaMapSector / MILITIA_BOX_ROWS ) * MILITIA_BOX_BOX_HEIGHT );
@@ -5253,8 +5270,6 @@ void CreateDestroyMilitiaSectorButtons( void )
pTrav = &(hVObject->pETRLEObject[ 0 ] ); pTrav = &(hVObject->pETRLEObject[ 0 ] );
SetButtonFastHelpText( giMapMilitiaButton[ iCounter ], pMilitiaButtonsHelpText[ iCounter ] ); SetButtonFastHelpText( giMapMilitiaButton[ iCounter ], pMilitiaButtonsHelpText[ iCounter ] );
} }
// mark here the militia box left click region // mark here the militia box left click region
@@ -5384,7 +5399,7 @@ void DisplayUnallocatedMilitia( void )
{ {
// show the nunber on the cursor // show the nunber on the cursor
INT32 iTotalNumberOfTroops =0, iNumberOfGreens = 0, iNumberOfRegulars =0, iNumberOfElites = 0, iCurrentTroopIcon = 0; INT32 iTotalNumberOfTroops =0, iNumberOfGreens = 0, iNumberOfRegulars =0, iNumberOfElites = 0, iCurrentTroopIcon = 0;
INT32 iCurrentIcon = 0; UINT16 usIconValue = 0;
INT16 sX = 0, sY = 0; INT16 sX = 0, sY = 0;
HVOBJECT hVObject; HVOBJECT hVObject;
@@ -5400,26 +5415,27 @@ void DisplayUnallocatedMilitia( void )
GetVideoObject( &hVObject, guiMilitia ); GetVideoObject( &hVObject, guiMilitia );
// now display // now display
for( iCurrentTroopIcon = 0; iCurrentTroopIcon < iTotalNumberOfTroops; iCurrentTroopIcon++ ) for( iCurrentTroopIcon = 0; iCurrentTroopIcon < iTotalNumberOfTroops; ++iCurrentTroopIcon )
{ {
// get screen x and y coords // get screen x and y coords
sX = ( iCurrentTroopIcon % NUMBER_OF_MILITIA_ICONS_PER_LOWER_ROW ) * MEDIUM_MILITIA_ICON_SPACING + MAP_MILITIA_BOX_POS_X + MAP_MILITIA_MAP_X + 1; sX = ( iCurrentTroopIcon % NUMBER_OF_MILITIA_ICONS_PER_LOWER_ROW ) * MEDIUM_MILITIA_ICON_SPACING + MAP_MILITIA_BOX_POS_X + MAP_MILITIA_MAP_X + 1;
sY = ( iCurrentTroopIcon / NUMBER_OF_MILITIA_ICONS_PER_LOWER_ROW ) * MEDIUM_MILITIA_ICON_SPACING + MAP_MILITIA_BOX_POS_Y + MAP_MILITIA_LOWER_ROW_Y; sY = ( iCurrentTroopIcon / NUMBER_OF_MILITIA_ICONS_PER_LOWER_ROW ) * MEDIUM_MILITIA_ICON_SPACING + MAP_MILITIA_BOX_POS_Y + MAP_MILITIA_LOWER_ROW_Y;
if( iCurrentTroopIcon < iNumberOfGreens ) // get the offset further into the .sti
if ( iCurrentTroopIcon < iNumberOfGreens )
{ {
iCurrentIcon = 8; usIconValue = 8;
} }
else if( iCurrentTroopIcon < iNumberOfGreens + iNumberOfRegulars ) else if ( iCurrentTroopIcon < iNumberOfGreens + iNumberOfRegulars )
{ {
iCurrentIcon = 9; usIconValue = 9;
} }
else else
{ {
iCurrentIcon = 10; usIconValue = 10;
} }
BltVideoObject( FRAME_BUFFER, hVObject, ( UINT16 )( iCurrentIcon ), sX, sY, VO_BLT_SRCTRANSPARENCY, NULL ); BltVideoObject( FRAME_BUFFER, hVObject, usIconValue, sX, sY, VO_BLT_SRCTRANSPARENCY, NULL );
} }
} }
@@ -5990,7 +6006,8 @@ void RenderShadingForUnControlledSectors( void )
void DrawTownMilitiaForcesOnMap( void ) void DrawTownMilitiaForcesOnMap( void )
{ {
INT32 iCounterB = 0, iTotalNumberOfTroops = 0, iIconValue = 0; INT32 iCounterB = 0, iTotalNumberOfTroops = 0;
UINT16 usIconValue = 0;
INT32 iNumberOfGreens = 0, iNumberOfRegulars = 0, iNumberOfElites = 0; INT32 iNumberOfGreens = 0, iNumberOfRegulars = 0, iNumberOfElites = 0;
HVOBJECT hVObject; HVOBJECT hVObject;
INT16 sSectorX = 0, sSectorY = 0; INT16 sSectorX = 0, sSectorY = 0;
@@ -6000,58 +6017,11 @@ void DrawTownMilitiaForcesOnMap( void )
// clip blits to mapscreen region // clip blits to mapscreen region
ClipBlitsToMapViewRegion( ); ClipBlitsToMapViewRegion( );
/*
while( pTownNamesList[ iCounter ] != 0 )
{
// run through each town sector and plot the icons for the militia forces in the town
if( !StrategicMap[ pTownLocationsList[ iCounter ] ].fEnemyControlled )
{
sSectorX = GET_X_FROM_STRATEGIC_INDEX( pTownLocationsList[ iCounter ] );
sSectorY = GET_Y_FROM_STRATEGIC_INDEX( pTownLocationsList[ iCounter ] );
// get number of each
iNumberOfGreens = SectorInfo[ STRATEGIC_INDEX_TO_SECTOR_INFO( pTownLocationsList[ iCounter ] ) ].ubNumberOfCivsAtLevel[ GREEN_MILITIA ];
iNumberOfRegulars = SectorInfo[ STRATEGIC_INDEX_TO_SECTOR_INFO( pTownLocationsList[ iCounter ] ) ].ubNumberOfCivsAtLevel[ REGULAR_MILITIA ];
iNumberOfElites = SectorInfo[ STRATEGIC_INDEX_TO_SECTOR_INFO( pTownLocationsList[ iCounter ] ) ].ubNumberOfCivsAtLevel[ ELITE_MILITIA ];
// set the total for loop upper bound
iTotalNumberOfTroops = iNumberOfGreens + iNumberOfRegulars + iNumberOfElites;
for( iCounterB = 0; iCounterB < iTotalNumberOfTroops; iCounterB++ )
{
// SMALL icon offset in the .sti
iIconValue = 5;
// get the offset further into the .sti
if( iCounterB < iNumberOfGreens )
{
iIconValue += 0;
}
else if( iCounterB < iNumberOfGreens + iNumberOfRegulars )
{
iIconValue += 1;
}
else
{
iIconValue += 2;
}
DrawMapBoxIcon( hVObject, ( UINT16 ) iIconValue, sSectorX, sSectorY, (UINT8) iCounterB );
}
}
iCounter++;
}*/
// now handle militia for sam sectors // now handle militia for sam sectors
for( sSectorX = MINIMUM_VALID_X_COORDINATE; sSectorX <= MAXIMUM_VALID_X_COORDINATE ; ++sSectorX ) for( sSectorX = MINIMUM_VALID_X_COORDINATE; sSectorX <= MAXIMUM_VALID_X_COORDINATE ; ++sSectorX )
for( sSectorY = MINIMUM_VALID_Y_COORDINATE; sSectorY <= MAXIMUM_VALID_Y_COORDINATE ; ++sSectorY )
//for( iCounter = 0; iCounter < NUMBER_OF_SAMS; iCounter++ )
{ {
// sSectorX = SECTORX( pSamList[ iCounter ] ); for( sSectorY = MINIMUM_VALID_Y_COORDINATE; sSectorY <= MAXIMUM_VALID_Y_COORDINATE ; ++sSectorY )
// sSectorY = SECTORY( pSamList[ iCounter ] );
if( 1)// !StrategicMap[ CALCULATE_STRATEGIC_INDEX( sSectorX, sSectorY ) ].fEnemyControlled )
{ {
// get number of each // get number of each
iNumberOfGreens = SectorInfo[ SECTOR( sSectorX, sSectorY ) ].ubNumberOfCivsAtLevel[ GREEN_MILITIA ]; iNumberOfGreens = SectorInfo[ SECTOR( sSectorX, sSectorY ) ].ubNumberOfCivsAtLevel[ GREEN_MILITIA ];
@@ -6061,33 +6031,30 @@ void DrawTownMilitiaForcesOnMap( void )
// ste the total for loop upper bound // ste the total for loop upper bound
iTotalNumberOfTroops = iNumberOfGreens + iNumberOfRegulars + iNumberOfElites; iTotalNumberOfTroops = iNumberOfGreens + iNumberOfRegulars + iNumberOfElites;
for( iCounterB = 0; iCounterB < iTotalNumberOfTroops; iCounterB++ ) for( iCounterB = 0; iCounterB < iTotalNumberOfTroops; ++iCounterB )
{ {
// SMALL icon offset in the .sti // SMALL icon offset in the .sti
iIconValue = 5;
// get the offset further into the .sti // get the offset further into the .sti
if( iCounterB < iNumberOfGreens ) if( iCounterB < iNumberOfGreens )
{ {
iIconValue += 0; usIconValue = 5;
} }
else if( iCounterB < iNumberOfGreens + iNumberOfRegulars ) else if( iCounterB < iNumberOfGreens + iNumberOfRegulars )
{ {
iIconValue += 1; usIconValue = 6;
} }
else else
{ {
iIconValue += 2; usIconValue = 7;
} }
DrawMapBoxIcon( hVObject, ( UINT16 ) iIconValue, sSectorX, sSectorY, (UINT8) iCounterB ); DrawMapBoxIcon( hVObject, usIconValue, sSectorX, sSectorY, (UINT8)iCounterB );
} }
} }
} }
// restore clip blits // restore clip blits
RestoreClipRegionToFullScreen( ); RestoreClipRegionToFullScreen( );
return;
} }
@@ -6515,6 +6482,7 @@ BOOLEAN CanMercsScoutThisSector( INT16 sSectorX, INT16 sSectorY, INT8 bSectorZ )
void HandleShowingOfEnemyForcesInSector( INT16 sSectorX, INT16 sSectorY, INT8 bSectorZ, UINT8 ubIconPosition ) void HandleShowingOfEnemyForcesInSector( INT16 sSectorX, INT16 sSectorY, INT8 bSectorZ, UINT8 ubIconPosition )
{ {
INT16 sNumberOfEnemies = 0; INT16 sNumberOfEnemies = 0;
UINT16 usNumTanks = 0;
// ATE: If game has just started, don't do it! // ATE: If game has just started, don't do it!
if ( DidGameJustStart() ) if ( DidGameJustStart() )
@@ -6534,6 +6502,9 @@ void HandleShowingOfEnemyForcesInSector( INT16 sSectorX, INT16 sSectorY, INT8 bS
// get total number of badguys here // get total number of badguys here
sNumberOfEnemies = NumEnemiesInSector( sSectorX, sSectorY ); sNumberOfEnemies = NumEnemiesInSector( sSectorX, sSectorY );
// Flugente: tanks get a special icon, so we need to count them separately
usNumTanks = NumEnemyTanksInSector( sSectorX, sSectorY );
// Flugente: note if we have detected a VIP here // Flugente: note if we have detected a VIP here
if ( PlayerKnowsAboutVIP( sSectorX, sSectorY ) ) if ( PlayerKnowsAboutVIP( sSectorX, sSectorY ) )
ShowVIPSymbol( sSectorX, sSectorY ); ShowVIPSymbol( sSectorX, sSectorY );
@@ -6572,13 +6543,13 @@ void HandleShowingOfEnemyForcesInSector( INT16 sSectorX, INT16 sSectorY, INT8 bS
case KNOWS_HOW_MANY: case KNOWS_HOW_MANY:
// display individual icons for each enemy, starting at the received icon position index // display individual icons for each enemy, starting at the received icon position index
ShowEnemiesInSector( sSectorX, sSectorY, sNumberOfEnemies, ubIconPosition ); ShowEnemiesInSector( sSectorX, sSectorY, sNumberOfEnemies, usNumTanks, ubIconPosition );
break; break;
// HEADROCK HAM 5: New case for showing enemy groups AND where the are headed. // HEADROCK HAM 5: New case for showing enemy groups AND where the are headed.
case KNOWS_HOW_MANY_AND_WHERE_GOING: case KNOWS_HOW_MANY_AND_WHERE_GOING:
// display individual icons for each enemy, starting at the received icon position index // display individual icons for each enemy, starting at the received icon position index
ShowEnemiesInSector( sSectorX, sSectorY, sNumberOfEnemies, ubIconPosition ); ShowEnemiesInSector( sSectorX, sSectorY, sNumberOfEnemies, usNumTanks, ubIconPosition );
// display their direction of movement, if valid. // display their direction of movement, if valid.
ShowEnemyGroupsInMotion( sSectorX, sSectorY ); ShowEnemyGroupsInMotion( sSectorX, sSectorY );
break; break;
@@ -6983,14 +6954,19 @@ void ShowItemsOnMap( void )
void DrawMapBoxIcon( HVOBJECT hIconHandle, UINT16 usVOIndex, INT16 sMapX, INT16 sMapY, UINT8 ubIconPosition ) void DrawMapBoxIcon( HVOBJECT hIconHandle, UINT16 usVOIndex, INT16 sMapX, INT16 sMapY, UINT8 ubIconPosition )
{ {
INT32 iRowNumber, iColumnNumber; INT32 iRowNumber, iColumnNumber;
INT32 iX, iY; INT32 iX, iY;
UINT8 iconOffsetX = 2; UINT8 iconOffsetX = 2;
UINT8 iconOffsetY = 1; UINT8 iconOffsetY = 1;
UINT8 iconSize = 0; UINT8 iconSize = 0;
// don't show any more icons than will fit into one sector, to keep them from spilling into sector(s) beneath
if ( ubIconPosition >= (MERC_ICONS_PER_LINE * ROWS_PER_SECTOR) )
{
return;
}
if (iResolution >= _640x480 && iResolution < _800x600) if (iResolution >= _640x480 && iResolution < _800x600)
{ {
iconSize = 3; iconSize = 3;
@@ -7004,13 +6980,6 @@ void DrawMapBoxIcon( HVOBJECT hIconHandle, UINT16 usVOIndex, INT16 sMapX, INT16
iconSize = 6; iconSize = 6;
} }
// don't show any more icons than will fit into one sector, to keep them from spilling into sector(s) beneath
if ( ubIconPosition >= ( MERC_ICONS_PER_LINE * ROWS_PER_SECTOR ) )
{
return;
}
iColumnNumber = ubIconPosition % MERC_ICONS_PER_LINE; iColumnNumber = ubIconPosition % MERC_ICONS_PER_LINE;
iRowNumber = ubIconPosition / MERC_ICONS_PER_LINE; iRowNumber = ubIconPosition / MERC_ICONS_PER_LINE;
+41
View File
@@ -271,6 +271,47 @@ UINT8 NumEnemiesInSector( INT16 sSectorX, INT16 sSectorY )
return ubNumTroops; return ubNumTroops;
} }
UINT16 NumEnemyTanksInSector( INT16 sSectorX, INT16 sSectorY )
{
SECTORINFO *pSector;
GROUP *pGroup;
UINT8 ubNum;
// HEADROCK: This is a TEMPORARY fix to avoid the assertion error. Not sure this is the best solution,
// probably isn't. But I need this bit to work.
if ( sSectorX < MINIMUM_VALID_X_COORDINATE ||
sSectorX > MAXIMUM_VALID_X_COORDINATE ||
sSectorY < MINIMUM_VALID_Y_COORDINATE ||
sSectorY > MAXIMUM_VALID_Y_COORDINATE )
{
return (0);
}
AssertGE( sSectorX, MINIMUM_VALID_X_COORDINATE );
AssertLE( sSectorX, MAXIMUM_VALID_X_COORDINATE );
AssertGE( sSectorY, MINIMUM_VALID_Y_COORDINATE );
AssertLE( sSectorY, MAXIMUM_VALID_Y_COORDINATE );
pSector = &SectorInfo[SECTOR( sSectorX, sSectorY )];
ubNum = (UINT16)(pSector->ubNumTanks);
// TODO
//if ( is_networked )
//ubNumTroops += numenemyLAN( (UINT8)sSectorX, (UINT8)sSectorY ); //hayden
pGroup = gpGroupList;
while ( pGroup )
{
if ( !pGroup->fPlayer && !pGroup->fVehicle && pGroup->ubSectorX == sSectorX && pGroup->ubSectorY == sSectorY )
{
ubNum += pGroup->pEnemyGroup->ubNumTanks;
}
pGroup = pGroup->next;
}
return ubNum;
}
UINT8 NumStationaryEnemiesInSector( INT16 sSectorX, INT16 sSectorY ) UINT8 NumStationaryEnemiesInSector( INT16 sSectorX, INT16 sSectorY )
{ {
SECTORINFO *pSector; SECTORINFO *pSector;
+1
View File
@@ -20,6 +20,7 @@ UINT8 NumHostilesInSector( INT16 sSectorX, INT16 sSectorY, INT16 sSectorZ );
UINT8 NumEnemiesInAnySector( INT16 sSectorX, INT16 sSectorY, INT16 sSectorZ ); UINT8 NumEnemiesInAnySector( INT16 sSectorX, INT16 sSectorY, INT16 sSectorZ );
UINT8 NumEnemiesInSector( INT16 sSectorX, INT16 sSectorY ); UINT8 NumEnemiesInSector( INT16 sSectorX, INT16 sSectorY );
UINT16 NumEnemyTanksInSector( INT16 sSectorX, INT16 sSectorY );
UINT8 NumStationaryEnemiesInSector( INT16 sSectorX, INT16 sSectorY ); UINT8 NumStationaryEnemiesInSector( INT16 sSectorX, INT16 sSectorY );
UINT8 NumMobileEnemiesInSector( INT16 sSectorX, INT16 sSectorY ); UINT8 NumMobileEnemiesInSector( INT16 sSectorX, INT16 sSectorY );
void GetNumberOfMobileEnemiesInSector( INT16 sSectorX, INT16 sSectorY, UINT8 *pubNumAdmins, UINT8 *pubNumTroops, UINT8 *pubNumElites, UINT8 *pubNumTanks ); void GetNumberOfMobileEnemiesInSector( INT16 sSectorX, INT16 sSectorY, UINT8 *pubNumAdmins, UINT8 *pubNumTroops, UINT8 *pubNumElites, UINT8 *pubNumTanks );