Merged from revision: 7335

Updates (by Buggler)
- Mercs, militia & enemies are now shown with 10x icons on strategic screen
- Changed militia icon order display in strategic map; elite first 

git-svn-id: https://ja2svn.mooo.com/source/ja2/trunk/GameSource/ja2_v1.13/Build@7336 3b4a5df2-a311-0410-b5c6-a8a6f20db521
This commit is contained in:
Wanne
2014-07-14 19:38:20 +00:00
parent 3628b26e69
commit 696e9ccdff
+284 -81
View File
@@ -106,6 +106,27 @@ UINT16 MAP_LEVEL_STRING_Y;
// max number of sectors viewable // max number of sectors viewable
#define MAX_VIEW_SECTORS 16 #define MAX_VIEW_SECTORS 16
// "Militia" Icons
#define POPUP_FRAMEBORDER 0
#define BIG_NORMAL_BUTTON 1
#define BIG_PRESSED_BUTTON 2
#define SMALL_NORMAL_BUTTON 3
#define SMALL_PRESSED_BUTTON 4
#define SMALL_GREEN_BOX 5
#define SMALL_CYAN_BOX 6
#define SMALL_BLUE_BOX 7
#define POPUP_GREEN_BOX 8
#define POPUP_CYAN_BOX 9
#define POPUP_BLUE_BOX 10
#define BIG_GREEN_BOX 11
#define BIG_CYAN_BOX 12
#define BIG_BLUE_BOX 13
#define SMALL_GREEN_10X_BOX 14
#define SMALL_CYAN_10X_BOX 15
#define SMALL_BLUE_10X_BOX 16
#define POPUP_GREEN_10X_BOX 17
#define POPUP_CYAN_10X_BOX 18
#define POPUP_BLUE_10X_BOX 19
// "Boxes" Icons // "Boxes" Icons
#define SMALL_YELLOW_BOX 0 #define SMALL_YELLOW_BOX 0
@@ -120,6 +141,10 @@ UINT16 MAP_LEVEL_STRING_Y;
#define BIG_QUESTION_MARK 9 #define BIG_QUESTION_MARK 9
#define VIP_SYMBOL 10 #define VIP_SYMBOL 10
#define ENEMY_TANK_BIG 11 #define ENEMY_TANK_BIG 11
#define SMALL_YELLOW_10X_BOX 12
#define SMALL_DULL_YELLOW_10X_BOX 13
#define SMALL_WHITE_10X_BOX 14
#define SMALL_RED_10X_BOX 15
#define MERC_ICONS_PER_LINE 6 #define MERC_ICONS_PER_LINE 6
#define ROWS_PER_SECTOR 5 #define ROWS_PER_SECTOR 5
@@ -659,6 +684,10 @@ void DrawMapIndexBigMap( BOOLEAN fSelectedCursorIsYellow )
void HandleShowingOfEnemiesWithMilitiaOn( void ) void HandleShowingOfEnemiesWithMilitiaOn( void )
{ {
INT16 sX = 0, sY = 0; INT16 sX = 0, sY = 0;
INT32 iNumberOfGreens = 0;
INT32 iNumberOfRegulars = 0;
INT32 iNumberOfElites = 0;
INT32 iTotalNumberOfIcons = 0;
// if show militia flag is false, leave // if show militia flag is false, leave
if( !fShowMilitia ) if( !fShowMilitia )
@@ -670,7 +699,16 @@ void HandleShowingOfEnemiesWithMilitiaOn( void )
{ {
for( sY = 1; sY < ( MAP_WORLD_Y - 1); sY++ ) for( sY = 1; sY < ( MAP_WORLD_Y - 1); sY++ )
{ {
HandleShowingOfEnemyForcesInSector( sX, sY, ( INT8 )iCurrentMapSectorZ, CountAllMilitiaInSector( sX, sY ) ); // get number of each
iNumberOfGreens = SectorInfo[ SECTOR( sX, sY ) ].ubNumberOfCivsAtLevel[ GREEN_MILITIA ];
iNumberOfRegulars = SectorInfo[ SECTOR( sX, sY ) ].ubNumberOfCivsAtLevel[ REGULAR_MILITIA ];
iNumberOfElites = SectorInfo[ SECTOR( sX, sY ) ].ubNumberOfCivsAtLevel[ ELITE_MILITIA ];
// militia icons drawn
iTotalNumberOfIcons = iNumberOfGreens / 10 + iNumberOfGreens % 10 + iNumberOfRegulars / 10 + iNumberOfRegulars % 10
+ iNumberOfElites / 10 + iNumberOfElites % 10;
HandleShowingOfEnemyForcesInSector( sX, sY, ( INT8 )iCurrentMapSectorZ, iTotalNumberOfIcons );
} }
} }
@@ -919,7 +957,7 @@ UINT32 DrawMap( void )
if( fShowTownFlag ) if( fShowTownFlag )
{ {
BlitTownGridMarkers( ); BlitTownGridMarkers( );
ShowTownText( ); ShowTownText( );
} }
// draw militia icons // draw militia icons
@@ -1119,6 +1157,8 @@ 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;
UINT8 i, ubIcon, ub10xIcon;
INT16 sNumberOnDuty = 0;
GetVideoObject(&hIconHandle, guiCHARICONS); GetVideoObject(&hIconHandle, guiCHARICONS);
@@ -1135,25 +1175,41 @@ INT32 ShowOnDutyTeam( INT16 sMapX, INT16 sMapY )
( pSoldier->stats.bLife > 0) && ( pSoldier->stats.bLife > 0) &&
( !PlayerIDGroupInMotion( pSoldier->ubGroupID ) ) ) ( !PlayerIDGroupInMotion( pSoldier->ubGroupID ) ) )
{ {
DrawMapBoxIcon( hIconHandle, SMALL_YELLOW_BOX, sMapX, sMapY, ubIconPosition ); sNumberOnDuty++;
++ubIconPosition;
} }
++ubCounter; ++ubCounter;
} }
ub10xIcon = sNumberOnDuty / 10;
ubIcon = sNumberOnDuty % 10;
// draw 10x icon
for( i = 0; i < ub10xIcon; i++ )
{
DrawMapBoxIcon( hIconHandle, SMALL_YELLOW_10X_BOX, sMapX, sMapY, ubIconPosition );
ubIconPosition++;
}
// draw 1x icon
for( i = 0; i < ubIcon; i++ )
{
DrawMapBoxIcon( hIconHandle, SMALL_YELLOW_BOX, sMapX, sMapY, ubIconPosition );
ubIconPosition++;
}
return ubIconPosition; return ubIconPosition;
} }
INT32 ShowAssignedTeam(INT16 sMapX, INT16 sMapY, INT32 iCount) INT32 ShowAssignedTeam(INT16 sMapX, INT16 sMapY, INT32 iCount)
{ {
UINT8 ubCounter, ubIconPosition; UINT8 ubCounter = 0, ubIconPosition;
HVOBJECT hIconHandle; HVOBJECT hIconHandle;
SOLDIERTYPE *pSoldier = NULL; SOLDIERTYPE *pSoldier = NULL;
UINT8 i, ubIcon, ub10xIcon;
INT16 sNumberOfAssigned = 0;
GetVideoObject(&hIconHandle, guiCHARICONS); GetVideoObject(&hIconHandle, guiCHARICONS);
ubCounter=0;
// run through list // run through list
ubIconPosition = ( UINT8 ) iCount; ubIconPosition = ( UINT8 ) iCount;
@@ -1177,25 +1233,41 @@ INT32 ShowAssignedTeam(INT16 sMapX, INT16 sMapY, INT32 iCount)
// skip mercs inside the helicopter if we're showing airspace level - they show up inside chopper icon instead // skip mercs inside the helicopter if we're showing airspace level - they show up inside chopper icon instead
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 ); sNumberOfAssigned++;
++ubIconPosition;
} }
} }
++ubCounter; ++ubCounter;
} }
ub10xIcon = sNumberOfAssigned / 10;
ubIcon = sNumberOfAssigned % 10;
// draw 10x icon
for( i = 0; i < ub10xIcon; i++ )
{
DrawMapBoxIcon( hIconHandle, SMALL_DULL_YELLOW_10X_BOX, sMapX, sMapY, ubIconPosition );
ubIconPosition++;
}
// draw 1x icon
for( i = 0; i < ubIcon; i++ )
{
DrawMapBoxIcon( hIconHandle, SMALL_DULL_YELLOW_BOX, sMapX, sMapY, ubIconPosition );
ubIconPosition++;
}
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 = 0, ubIconPosition;
HVOBJECT hIconHandle; HVOBJECT hIconHandle;
SOLDIERTYPE *pVehicleSoldier; SOLDIERTYPE *pVehicleSoldier;
UINT8 i, ubIcon, ub10xIcon;
INT16 sNumberOfVehiclesInSector = 0;
GetVideoObject(&hIconHandle, guiCHARICONS); GetVideoObject(&hIconHandle, guiCHARICONS);
ubCounter=0;
ubIconPosition = (UINT8) iCount; ubIconPosition = (UINT8) iCount;
@@ -1219,17 +1291,31 @@ INT32 ShowVehicles(INT16 sMapX, INT16 sMapY, INT32 iCount)
{ {
if ( pVehicleSoldier->bTeam == gbPlayerNum ) if ( pVehicleSoldier->bTeam == gbPlayerNum )
{ {
DrawMapBoxIcon( hIconHandle, SMALL_WHITE_BOX, sMapX, sMapY, ubIconPosition ); sNumberOfVehiclesInSector++;
++ubIconPosition;
} }
} }
} }
} }
} }
++ubCounter; ++ubCounter;
} }
ub10xIcon = sNumberOfVehiclesInSector / 10;
ubIcon = sNumberOfVehiclesInSector % 10;
// draw 10x icon
for( i = 0; i < ub10xIcon; i++ )
{
DrawMapBoxIcon( hIconHandle, SMALL_WHITE_10X_BOX, sMapX, sMapY, ubIconPosition );
ubIconPosition++;
}
// draw 1x icon
for( i = 0; i < ubIcon; i++ )
{
DrawMapBoxIcon( hIconHandle, SMALL_WHITE_BOX, sMapX, sMapY, ubIconPosition );
ubIconPosition++;
}
return ubIconPosition; return ubIconPosition;
} }
@@ -1237,15 +1323,20 @@ INT32 ShowVehicles(INT16 sMapX, INT16 sMapY, INT32 iCount)
void ShowEnemiesInSector( INT16 sSectorX, INT16 sSectorY, INT16 sNumberOfEnemies, UINT16 usNumTanks, UINT8 ubIconPosition ) void ShowEnemiesInSector( INT16 sSectorX, INT16 sSectorY, INT16 sNumberOfEnemies, UINT16 usNumTanks, UINT8 ubIconPosition )
{ {
HVOBJECT hIconHandle; HVOBJECT hIconHandle;
UINT8 ubEnemy = 0; UINT8 i, ubEnemy, ub10xEnemy;
INT16 sEnemyLessTank;
// get the video object // get the video object
GetVideoObject(&hIconHandle, guiCHARICONS); GetVideoObject(&hIconHandle, guiCHARICONS);
sEnemyLessTank = sNumberOfEnemies - usNumTanks;
ub10xEnemy = sEnemyLessTank / 10;
ubEnemy = sEnemyLessTank % 10;
// Flugente: if we display tanks, we need to know that for several rows // Flugente: if we display tanks, we need to know that for several rows
INT16 secondtankrowstart = -1; INT16 secondtankrowstart = -1;
for( ubEnemy = 0; ubEnemy < sNumberOfEnemies; ++ubEnemy ) for( i = 0; i < sNumberOfEnemies; ++i )
{ {
// Flugente: the tank icon has is 4 icons wide and 2 rows high, thus this odd code bit // Flugente: the tank icon has is 4 icons wide and 2 rows high, thus this odd code bit
// 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 we want to display a tank and have not yet done so, pick the first position that still has enough space to the right
@@ -1263,10 +1354,17 @@ void ShowEnemiesInSector( INT16 sSectorX, INT16 sSectorY, INT16 sNumberOfEnemies
ubIconPosition += 4; ubIconPosition += 4;
ubEnemy = max( 0, ubEnemy - 1); ubEnemy = max( 0, ubEnemy - 1);
} }
else else if ( ub10xEnemy > 0 )
{
DrawMapBoxIcon( hIconHandle, SMALL_RED_10X_BOX, sSectorX, sSectorY, ubIconPosition );
ub10xEnemy--;
ubIconPosition++;
}
else if ( ubEnemy > 0 )
{ {
DrawMapBoxIcon( hIconHandle, SMALL_RED_BOX, sSectorX, sSectorY, ubIconPosition ); DrawMapBoxIcon( hIconHandle, SMALL_RED_BOX, sSectorX, sSectorY, ubIconPosition );
++ubIconPosition; ubEnemy--;
ubIconPosition++;
} }
} }
} }
@@ -1348,8 +1446,8 @@ void ShowVIPSymbol( INT16 sSectorX, INT16 sSectorY )
sYPosition = (INT16)(((iconOffsetY + (sSectorY * MAP_GRID_Y) + 1))); sYPosition = (INT16)(((iconOffsetY + (sSectorY * MAP_GRID_Y) + 1)));
sYPosition -= 2; sYPosition -= 2;
// small question mark // small VIP symbol
BltVideoObject( guiSAVEBUFFER, hIconHandle, 10, sXPosition, sYPosition, VO_BLT_SRCTRANSPARENCY, NULL ); BltVideoObject( guiSAVEBUFFER, hIconHandle, VIP_SYMBOL, sXPosition, sYPosition, VO_BLT_SRCTRANSPARENCY, NULL );
InvalidateRegion( sXPosition, sYPosition, sXPosition + DMAP_GRID_X, sYPosition + DMAP_GRID_Y ); InvalidateRegion( sXPosition, sYPosition, sXPosition + DMAP_GRID_X, sYPosition + DMAP_GRID_Y );
} }
@@ -1357,7 +1455,7 @@ void ShowVIPSymbol( INT16 sSectorX, INT16 sSectorY )
void ShowTeamAndVehicles(INT32 fShowFlags) void ShowTeamAndVehicles(INT32 fShowFlags)
{ {
// go through each sector, display the on duty, assigned, and vehicles // go through each sector, display the on duty, assigned, and vehicles
INT16 sMapX = 0; INT16 sMapX = 0;
INT16 sMapY = 0; INT16 sMapY = 0;
INT32 iIconOffset = 0; INT32 iIconOffset = 0;
BOOLEAN fContemplatingRetreating = FALSE; BOOLEAN fContemplatingRetreating = FALSE;
@@ -4933,7 +5031,7 @@ BOOLEAN DrawMilitiaPopUpBox( void )
// get the properties of the militia object // get the properties of the militia object
GetVideoObject( &hVObject, guiMilitia ); GetVideoObject( &hVObject, guiMilitia );
BltVideoObject( FRAME_BUFFER, hVObject, 0, MAP_MILITIA_BOX_POS_X, MAP_MILITIA_BOX_POS_Y, VO_BLT_SRCTRANSPARENCY, NULL ); BltVideoObject( FRAME_BUFFER, hVObject, POPUP_FRAMEBORDER, MAP_MILITIA_BOX_POS_X, MAP_MILITIA_BOX_POS_Y, VO_BLT_SRCTRANSPARENCY, NULL );
GetVideoObject( &hVObject, guiMilitiaMaps ); GetVideoObject( &hVObject, guiMilitiaMaps );
BltVideoObject( FRAME_BUFFER, hVObject, ( UINT16 )( sSelectedMilitiaTown - 1 ), MAP_MILITIA_BOX_POS_X + MAP_MILITIA_MAP_X, MAP_MILITIA_BOX_POS_Y + MAP_MILITIA_MAP_Y, VO_BLT_SRCTRANSPARENCY, NULL ); BltVideoObject( FRAME_BUFFER, hVObject, ( UINT16 )( sSelectedMilitiaTown - 1 ), MAP_MILITIA_BOX_POS_X + MAP_MILITIA_MAP_X, MAP_MILITIA_BOX_POS_Y + MAP_MILITIA_MAP_Y, VO_BLT_SRCTRANSPARENCY, NULL );
@@ -5031,11 +5129,13 @@ void RenderIconsPerSectorForSelectedTown( void )
INT32 iNumberOfElites = 0; INT32 iNumberOfElites = 0;
INT32 iTotalNumberOfTroops = 0; INT32 iTotalNumberOfTroops = 0;
INT32 iCurrentTroopIcon = 0; INT32 iCurrentTroopIcon = 0;
INT32 iTotalNumberOfIcons = 0;
HVOBJECT hVObject; HVOBJECT hVObject;
UINT16 usIconValue = 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;
UINT8 ubGreen, ubRegular, ubElite, ub10xGreen, ub10xRegular, ub10xElite;
// get the sector value for the upper left corner // get the sector value for the upper left corner
@@ -5091,24 +5191,47 @@ void RenderIconsPerSectorForSelectedTown( void )
} }
} }
// get cumulative icons
ub10xElite = iNumberOfElites / 10;
ubElite = iNumberOfElites % 10 + ub10xElite;
ub10xRegular = iNumberOfRegulars / 10 + ubElite;
ubRegular = iNumberOfRegulars % 10 + ub10xRegular;
ub10xGreen = iNumberOfGreens / 10 + ubRegular;
ubGreen = iNumberOfGreens % 10 + ub10xGreen;
iTotalNumberOfIcons = ubGreen;
// now display // now display
for( iCurrentTroopIcon = 0; iCurrentTroopIcon < iTotalNumberOfTroops; iCurrentTroopIcon++ ) for( iCurrentTroopIcon = 0; iCurrentTroopIcon < iTotalNumberOfIcons; iCurrentTroopIcon++ )
{ {
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;
// get the offset further into the .sti
if ( iCurrentTroopIcon < iNumberOfGreens ) if( iCurrentTroopIcon < ub10xElite )
{ {
usIconValue = 8; usIconValue = POPUP_BLUE_10X_BOX;
} }
else if ( iCurrentTroopIcon < iNumberOfGreens + iNumberOfRegulars ) else if( iCurrentTroopIcon < ubElite )
{ {
usIconValue = 9; usIconValue = POPUP_BLUE_BOX;
}
// then draw regulars
else if( iCurrentTroopIcon < ub10xRegular )
{
usIconValue = POPUP_CYAN_10X_BOX;
}
else if( iCurrentTroopIcon < ubRegular )
{
usIconValue = POPUP_CYAN_BOX;
}
// last draw greens
else if( iCurrentTroopIcon < ub10xGreen )
{
usIconValue = POPUP_GREEN_10X_BOX;
} }
else else
{ {
usIconValue = 10; usIconValue = POPUP_GREEN_BOX;
} }
BltVideoObject( FRAME_BUFFER, hVObject, usIconValue, sX, sY, VO_BLT_SRCTRANSPARENCY, NULL ); BltVideoObject( FRAME_BUFFER, hVObject, usIconValue, sX, sY, VO_BLT_SRCTRANSPARENCY, NULL );
@@ -5249,11 +5372,11 @@ void CreateDestroyMilitiaSectorButtons( void )
// set the button image // set the button image
if (iResolution >= _640x480 && iResolution < _800x600) if (iResolution >= _640x480 && iResolution < _800x600)
giMapMilitiaButtonImage[ iCounter ]= LoadButtonImage( "INTERFACE\\militia.sti", -1,3,-1,4,-1 ); giMapMilitiaButtonImage[ iCounter ]= LoadButtonImage( "INTERFACE\\militia.sti", -1,SMALL_NORMAL_BUTTON,-1,SMALL_PRESSED_BUTTON,-1 );
else if (iResolution < _1024x768) else if (iResolution < _1024x768)
giMapMilitiaButtonImage[ iCounter ]= LoadButtonImage( "INTERFACE\\militia_800x600.sti", -1,3,-1,4,-1 ); giMapMilitiaButtonImage[ iCounter ]= LoadButtonImage( "INTERFACE\\militia_800x600.sti", -1,SMALL_NORMAL_BUTTON,-1,SMALL_PRESSED_BUTTON,-1 );
else else
giMapMilitiaButtonImage[ iCounter ]= LoadButtonImage( "INTERFACE\\militia_1024x768.sti", -1,3,-1,4,-1 ); giMapMilitiaButtonImage[ iCounter ]= LoadButtonImage( "INTERFACE\\militia_1024x768.sti", -1,SMALL_NORMAL_BUTTON,-1,SMALL_PRESSED_BUTTON,-1 );
// set the button value // set the button value
giMapMilitiaButton[ iCounter ] = QuickCreateButton( giMapMilitiaButtonImage[ iCounter ], sX, sY, giMapMilitiaButton[ iCounter ] = QuickCreateButton( giMapMilitiaButtonImage[ iCounter ], sX, sY,
@@ -5397,45 +5520,98 @@ void MilitiaButtonCallback(GUI_BUTTON *btn,INT32 reason)
void DisplayUnallocatedMilitia( void ) void DisplayUnallocatedMilitia( void )
{ {
// show the nunber on the cursor // show the number on the cursor
INT32 iTotalNumberOfTroops =0, iNumberOfGreens = 0, iNumberOfRegulars =0, iNumberOfElites = 0, iCurrentTroopIcon = 0; INT32 iTotalNumberOfIcons = 0, iNumberOfGreens = 0, iNumberOfRegulars = 0, iNumberOfElites = 0, iCurrentTroopIcon = 0;
UINT16 usIconValue = 0; INT32 iCurrentIcon = 0;
INT16 sX = 0, sY = 0; INT16 sX = 0, sY = 0;
HVOBJECT hVObject; HVOBJECT hVObject;
UINT8 ubGreen, ubRegular, ubElite, ub10xGreen, ub10xRegular, ub10xElite;
UINT8 ubRow = 0;
// get militia video object
GetVideoObject( &hVObject, guiMilitia );
// get number of each // get number of each
iNumberOfGreens = sGreensOnCursor; iNumberOfGreens = sGreensOnCursor;
iNumberOfRegulars = sRegularsOnCursor; iNumberOfRegulars = sRegularsOnCursor;
iNumberOfElites = sElitesOnCursor; iNumberOfElites = sElitesOnCursor;
// get total // get number of green icons
iTotalNumberOfTroops = iNumberOfGreens + iNumberOfRegulars + iNumberOfElites; ub10xGreen = iNumberOfGreens / 10;
ubGreen = iNumberOfGreens % 10;
iTotalNumberOfIcons = ub10xGreen + ubGreen;
// get militia video object // now display green icons
GetVideoObject( &hVObject, guiMilitia ); for( iCurrentTroopIcon = 0; iCurrentTroopIcon < iTotalNumberOfIcons; iCurrentTroopIcon++ )
// now display
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;
// get the offset further into the .sti if( iCurrentTroopIcon < ub10xGreen )
if ( iCurrentTroopIcon < iNumberOfGreens )
{ {
usIconValue = 8; iCurrentIcon = POPUP_GREEN_10X_BOX;
}
else if ( iCurrentTroopIcon < iNumberOfGreens + iNumberOfRegulars )
{
usIconValue = 9;
} }
else else
{ {
usIconValue = 10; iCurrentIcon = POPUP_GREEN_BOX;
} }
BltVideoObject( FRAME_BUFFER, hVObject, usIconValue, sX, sY, VO_BLT_SRCTRANSPARENCY, NULL ); BltVideoObject( FRAME_BUFFER, hVObject, ( UINT16 )( iCurrentIcon ), sX, sY, VO_BLT_SRCTRANSPARENCY, NULL );
}
// offset row for regulars
ubRow += iTotalNumberOfIcons / NUMBER_OF_MILITIA_ICONS_PER_LOWER_ROW + 1;
// get number of cyan icons
ub10xRegular = iNumberOfRegulars / 10;
ubRegular = iNumberOfRegulars % 10;
iTotalNumberOfIcons = ub10xRegular + ubRegular;
// now display cyan icons
for( iCurrentTroopIcon = 0; iCurrentTroopIcon < iTotalNumberOfIcons; iCurrentTroopIcon++ )
{
// 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;
sY = ( ubRow + iCurrentTroopIcon / NUMBER_OF_MILITIA_ICONS_PER_LOWER_ROW ) * MEDIUM_MILITIA_ICON_SPACING + MAP_MILITIA_BOX_POS_Y + MAP_MILITIA_LOWER_ROW_Y;
if( iCurrentTroopIcon < ub10xRegular )
{
iCurrentIcon = POPUP_CYAN_10X_BOX;
}
else
{
iCurrentIcon = POPUP_CYAN_BOX;
}
BltVideoObject( FRAME_BUFFER, hVObject, ( UINT16 )( iCurrentIcon ), sX, sY, VO_BLT_SRCTRANSPARENCY, NULL );
}
// offset row for elites
ubRow += iTotalNumberOfIcons / NUMBER_OF_MILITIA_ICONS_PER_LOWER_ROW + 1;
// get number of blue icons
ub10xElite = iNumberOfElites / 10;
ubElite = iNumberOfElites % 10;
iTotalNumberOfIcons = ub10xElite + ubElite;
// now display blue icons
for( iCurrentTroopIcon = 0; iCurrentTroopIcon < iTotalNumberOfIcons; iCurrentTroopIcon++ )
{
// 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;
sY = ( ubRow + iCurrentTroopIcon / NUMBER_OF_MILITIA_ICONS_PER_LOWER_ROW ) * MEDIUM_MILITIA_ICON_SPACING + MAP_MILITIA_BOX_POS_Y + MAP_MILITIA_LOWER_ROW_Y;
if( iCurrentTroopIcon < ub10xElite )
{
iCurrentIcon = POPUP_BLUE_10X_BOX;
}
else
{
iCurrentIcon = POPUP_BLUE_BOX;
}
BltVideoObject( FRAME_BUFFER, hVObject, ( UINT16 )( iCurrentIcon ), sX, sY, VO_BLT_SRCTRANSPARENCY, NULL );
} }
} }
@@ -5796,21 +5972,21 @@ void CreateMilitiaPanelBottomButton( void )
// set the button image // set the button image
if (iResolution >= _640x480 && iResolution < _800x600) if (iResolution >= _640x480 && iResolution < _800x600)
{ {
giMapMilitiaButtonImage[ 3 ]= LoadButtonImage( "INTERFACE\\militia.sti" ,-1,1,-1,2,-1 ); giMapMilitiaButtonImage[ 3 ]= LoadButtonImage( "INTERFACE\\militia.sti" ,-1,BIG_NORMAL_BUTTON,-1,BIG_PRESSED_BUTTON,-1 );
giMapMilitiaButtonImage[ 4 ]= LoadButtonImage( "INTERFACE\\militia.sti" ,-1,1,-1,2,-1 ); giMapMilitiaButtonImage[ 4 ]= LoadButtonImage( "INTERFACE\\militia.sti" ,-1,BIG_NORMAL_BUTTON,-1,BIG_PRESSED_BUTTON,-1 );
giMapMilitiaButtonImage[ 5 ]= LoadButtonImage( "INTERFACE\\militia.sti" ,-1,1,-1,2,-1 ); giMapMilitiaButtonImage[ 5 ]= LoadButtonImage( "INTERFACE\\militia.sti" ,-1,BIG_NORMAL_BUTTON,-1,BIG_PRESSED_BUTTON,-1 );
} }
else if (iResolution < _1024x768) else if (iResolution < _1024x768)
{ {
giMapMilitiaButtonImage[ 3 ]= LoadButtonImage( "INTERFACE\\militia_800x600.sti" ,-1,1,-1,2,-1 ); giMapMilitiaButtonImage[ 3 ]= LoadButtonImage( "INTERFACE\\militia_800x600.sti" ,-1,BIG_NORMAL_BUTTON,-1,BIG_PRESSED_BUTTON,-1 );
giMapMilitiaButtonImage[ 4 ]= LoadButtonImage( "INTERFACE\\militia_800x600.sti" ,-1,1,-1,2,-1 ); giMapMilitiaButtonImage[ 4 ]= LoadButtonImage( "INTERFACE\\militia_800x600.sti" ,-1,BIG_NORMAL_BUTTON,-1,BIG_PRESSED_BUTTON,-1 );
giMapMilitiaButtonImage[ 5 ]= LoadButtonImage( "INTERFACE\\militia_800x600.sti" ,-1,1,-1,2,-1 ); giMapMilitiaButtonImage[ 5 ]= LoadButtonImage( "INTERFACE\\militia_800x600.sti" ,-1,BIG_NORMAL_BUTTON,-1,BIG_PRESSED_BUTTON,-1 );
} }
else else
{ {
giMapMilitiaButtonImage[ 3 ]= LoadButtonImage( "INTERFACE\\militia_1024x768.sti" ,-1,1,-1,2,-1 ); giMapMilitiaButtonImage[ 3 ]= LoadButtonImage( "INTERFACE\\militia_1024x768.sti" ,-1,BIG_NORMAL_BUTTON,-1,BIG_PRESSED_BUTTON,-1 );
giMapMilitiaButtonImage[ 4 ]= LoadButtonImage( "INTERFACE\\militia_1024x768.sti" ,-1,1,-1,2,-1 ); giMapMilitiaButtonImage[ 4 ]= LoadButtonImage( "INTERFACE\\militia_1024x768.sti" ,-1,BIG_NORMAL_BUTTON,-1,BIG_PRESSED_BUTTON,-1 );
giMapMilitiaButtonImage[ 5 ]= LoadButtonImage( "INTERFACE\\militia_1024x768.sti" ,-1,1,-1,2,-1 ); giMapMilitiaButtonImage[ 5 ]= LoadButtonImage( "INTERFACE\\militia_1024x768.sti" ,-1,BIG_NORMAL_BUTTON,-1,BIG_PRESSED_BUTTON,-1 );
} }
giMapMilitiaButton[ 3 ] = QuickCreateButton( giMapMilitiaButtonImage[ 3 ], MAP_MILITIA_BOX_POS_X + MAP_MILITIA_BOX_AUTO_BOX_X, MAP_MILITIA_BOX_POS_Y + MAP_MILITIA_BOX_AUTO_BOX_Y, giMapMilitiaButton[ 3 ] = QuickCreateButton( giMapMilitiaButtonImage[ 3 ], MAP_MILITIA_BOX_POS_X + MAP_MILITIA_BOX_AUTO_BOX_X, MAP_MILITIA_BOX_POS_Y + MAP_MILITIA_BOX_AUTO_BOX_Y,
@@ -6011,6 +6187,8 @@ void DrawTownMilitiaForcesOnMap( void )
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;
UINT8 ubGreen, ubRegular, ubElite, ub10xGreen, ub10xRegular, ub10xElite;
UINT8 i, ubIconPosition;
// get militia video object // get militia video object
GetVideoObject( &hVObject, guiMilitia ); GetVideoObject( &hVObject, guiMilitia );
@@ -6018,41 +6196,66 @@ void DrawTownMilitiaForcesOnMap( void )
// clip blits to mapscreen region // clip blits to mapscreen region
ClipBlitsToMapViewRegion( ); ClipBlitsToMapViewRegion( );
// now handle militia for sam sectors // now handle militia for all 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( sSectorY = MINIMUM_VALID_Y_COORDINATE; sSectorY <= MAXIMUM_VALID_Y_COORDINATE ; ++sSectorY )
{ {
ubIconPosition = 0;
// get number of each // get number of each
iNumberOfGreens = SectorInfo[ SECTOR( sSectorX, sSectorY ) ].ubNumberOfCivsAtLevel[ GREEN_MILITIA ]; iNumberOfGreens = SectorInfo[ SECTOR( sSectorX, sSectorY ) ].ubNumberOfCivsAtLevel[ GREEN_MILITIA ];
iNumberOfRegulars = SectorInfo[ SECTOR( sSectorX, sSectorY ) ].ubNumberOfCivsAtLevel[ REGULAR_MILITIA ]; iNumberOfRegulars = SectorInfo[ SECTOR( sSectorX, sSectorY ) ].ubNumberOfCivsAtLevel[ REGULAR_MILITIA ];
iNumberOfElites = SectorInfo[ SECTOR( sSectorX, sSectorY ) ].ubNumberOfCivsAtLevel[ ELITE_MILITIA ]; iNumberOfElites = SectorInfo[ SECTOR( sSectorX, sSectorY ) ].ubNumberOfCivsAtLevel[ ELITE_MILITIA ];
// ste the total for loop upper bound // get number of icons of each
iTotalNumberOfTroops = iNumberOfGreens + iNumberOfRegulars + iNumberOfElites; ub10xGreen = iNumberOfGreens / 10;
ubGreen = iNumberOfGreens % 10;
ub10xRegular = iNumberOfRegulars / 10;
ubRegular = iNumberOfRegulars % 10;
ub10xElite = iNumberOfElites / 10;
ubElite = iNumberOfElites % 10;
for( iCounterB = 0; iCounterB < iTotalNumberOfTroops; ++iCounterB ) // first draw elites as they are more important
for( i = 0; i < ub10xElite; i++ )
{ {
// SMALL icon offset in the .sti DrawMapBoxIcon( hVObject, SMALL_BLUE_10X_BOX, sSectorX, sSectorY, ubIconPosition );
// get the offset further into the .sti ubIconPosition++;
if( iCounterB < iNumberOfGreens ) }
{
usIconValue = 5;
}
else if( iCounterB < iNumberOfGreens + iNumberOfRegulars )
{
usIconValue = 6;
}
else
{
usIconValue = 7;
}
DrawMapBoxIcon( hVObject, usIconValue, sSectorX, sSectorY, (UINT8)iCounterB ); for( i = 0; i < ubElite; i++ )
{
DrawMapBoxIcon( hVObject, SMALL_BLUE_BOX, sSectorX, sSectorY, ubIconPosition );
ubIconPosition++;
}
// then draw regulars
for( i = 0; i < ub10xRegular; i++ )
{
DrawMapBoxIcon( hVObject, SMALL_CYAN_10X_BOX, sSectorX, sSectorY, ubIconPosition );
ubIconPosition++;
}
for( i = 0; i < ubRegular; i++ )
{
DrawMapBoxIcon( hVObject, SMALL_CYAN_BOX, sSectorX, sSectorY, ubIconPosition );
ubIconPosition++;
}
// last draw greens
for( i = 0; i < ub10xGreen; i++ )
{
DrawMapBoxIcon( hVObject, SMALL_GREEN_10X_BOX, sSectorX, sSectorY, ubIconPosition );
ubIconPosition++;
}
for( i = 0; i < ubGreen; i++ )
{
DrawMapBoxIcon( hVObject, SMALL_GREEN_BOX, sSectorX, sSectorY, ubIconPosition );
ubIconPosition++;
} }
} }
} }
// restore clip blits // restore clip blits
RestoreClipRegionToFullScreen( ); RestoreClipRegionToFullScreen( );
} }