GetSoldierAboveGuyPositions:

- use max value so that animation and text do not overlap
- lowered Y offset for crouched stance

DrawSelectedUIAboveGuy:
- reduce vertical gap if not showing health bars

git-svn-id: https://ja2svn.mooo.com/source/ja2/trunk/GameSource/ja2_v1.13/Build@8805 3b4a5df2-a311-0410-b5c6-a8a6f20db521
This commit is contained in:
Sevenfm
2020-05-18 06:04:34 +00:00
parent ea1892c788
commit 84afe6b160
+48 -41
View File
@@ -1520,7 +1520,7 @@ void GetArrowsBackground( )
} }
void GetSoldierAboveGuyPositions( SOLDIERTYPE *pSoldier, INT16 *psX, INT16 *psY, BOOLEAN fRadio ) void GetSoldierAboveGuyPositions(SOLDIERTYPE *pSoldier, INT16 *psX, INT16 *psY, BOOLEAN fRadio)
{ {
INT16 sMercScreenX, sMercScreenY; INT16 sMercScreenX, sMercScreenY;
INT16 sOffsetX, sOffsetY; INT16 sOffsetX, sOffsetY;
@@ -1529,53 +1529,55 @@ void GetSoldierAboveGuyPositions( SOLDIERTYPE *pSoldier, INT16 *psX, INT16 *psY,
INT16 sTextBodyTypeYOffset = 62; INT16 sTextBodyTypeYOffset = 62;
// Find XY, dims, offsets // Find XY, dims, offsets
GetSoldierScreenPos( pSoldier, &sMercScreenX, &sMercScreenY ); GetSoldierScreenPos(pSoldier, &sMercScreenX, &sMercScreenY);
GetSoldierAnimOffsets( pSoldier, &sOffsetX, &sOffsetY ); GetSoldierAnimOffsets(pSoldier, &sOffsetX, &sOffsetY);
// OK, first thing to do is subtract offsets ( because GetSoldierScreenPos adds them... ) // OK, first thing to do is subtract offsets ( because GetSoldierScreenPos adds them... )
sMercScreenX -= sOffsetX; sMercScreenX -= sOffsetX;
sMercScreenY -= sOffsetY; sMercScreenY -= sOffsetY;
// Adjust based on stance // Adjust based on stance
if ( ( gAnimControl[ pSoldier->usAnimState ].uiFlags & ANIM_NOMOVE_MARKER) ) /*if ((gAnimControl[pSoldier->usAnimState].uiFlags & ANIM_NOMOVE_MARKER))
{ {
ubAnimUseHeight = gAnimControl[ pSoldier->usAnimState ].ubHeight; ubAnimUseHeight = gAnimControl[pSoldier->usAnimState].ubHeight;
} }
else else
{ {
ubAnimUseHeight = gAnimControl[ pSoldier->usAnimState ].ubEndHeight; ubAnimUseHeight = gAnimControl[pSoldier->usAnimState].ubEndHeight;
} }*/
switch ( ubAnimUseHeight )
// sevenfm: use max value so that animation and health string do not overlap
ubAnimUseHeight = max(gAnimControl[pSoldier->usAnimState].ubEndHeight, gAnimControl[pSoldier->usAnimState].ubHeight);
switch (ubAnimUseHeight)
{ {
case ANIM_STAND: case ANIM_STAND:
break; break;
case ANIM_PRONE: case ANIM_PRONE:
sStanceOffset = 25; sStanceOffset = 25;
break; break;
case ANIM_CROUCH: case ANIM_CROUCH:
sStanceOffset = 10; //sStanceOffset = 10;
break; // sevenfm: reduce gap between animation and text
sStanceOffset = 15;
break;
} }
// Adjust based on body type... // Adjust based on body type...
switch( pSoldier->ubBodyType ) switch (pSoldier->ubBodyType)
{ {
case CROW: case CROW:
sStanceOffset = 30;
sStanceOffset = 30; break;
break; case ROBOTNOWEAPON:
sStanceOffset = 30;
case ROBOTNOWEAPON: break;
sStanceOffset = 30;
break;
} }
// anv: passengers sit, but we want to display their names above vehicle // anv: passengers sit, but we want to display their names above vehicle
if( pSoldier->flags.uiStatusFlags & ( SOLDIER_DRIVER | SOLDIER_PASSENGER ) ) if (pSoldier->flags.uiStatusFlags & (SOLDIER_DRIVER | SOLDIER_PASSENGER))
{ {
sStanceOffset = 0; sStanceOffset = 0;
} }
@@ -1583,44 +1585,43 @@ void GetSoldierAboveGuyPositions( SOLDIERTYPE *pSoldier, INT16 *psX, INT16 *psY,
//sStanceOffset -= gpWorldLevelData[ pSoldier->sGridNo ].sHeight; //sStanceOffset -= gpWorldLevelData[ pSoldier->sGridNo ].sHeight;
// Adjust based on level // Adjust based on level
if ( pSoldier->pathing.bLevel == 1 && gsInterfaceLevel == 0 ) if (pSoldier->pathing.bLevel == 1 && gsInterfaceLevel == 0)
{ {
//sStanceOffset -= ROOF_LEVEL_HEIGHT; //sStanceOffset -= ROOF_LEVEL_HEIGHT;
} }
if ( pSoldier->pathing.bLevel == 0 && gsInterfaceLevel == 1 ) if (pSoldier->pathing.bLevel == 0 && gsInterfaceLevel == 1)
{ {
//sStanceOffset += ROOF_LEVEL_HEIGHT; //sStanceOffset += ROOF_LEVEL_HEIGHT;
} }
if ( pSoldier->ubProfile != NO_PROFILE ) if (pSoldier->ubProfile != NO_PROFILE)
{ {
if ( fRadio ) if (fRadio)
{ {
*psX = sMercScreenX - ( 80 / 2 ) - pSoldier->sLocatorOffX; *psX = sMercScreenX - (80 / 2) - pSoldier->sLocatorOffX;
*psY = sMercScreenY - sTextBodyTypeYOffset + sStanceOffset; *psY = sMercScreenY - sTextBodyTypeYOffset + sStanceOffset;
} }
else else
{ {
*psX = sMercScreenX - ( 80 / 2 ) - pSoldier->sLocatorOffX; *psX = sMercScreenX - (80 / 2) - pSoldier->sLocatorOffX;
*psY = sMercScreenY - sTextBodyTypeYOffset + sStanceOffset; *psY = sMercScreenY - sTextBodyTypeYOffset + sStanceOffset;
// OK, Check if we need to go below.... // OK, Check if we need to go below....
// Can do this 1) if displaying damge or 2 ) above screen // Can do this 1) if displaying damage or 2 ) above screen
// If not a radio position, adjust if we are getting hit, to be lower! // If not a radio position, adjust if we are getting hit, to be lower!
// If we are getting hit, lower them! // If we are getting hit, lower them!
if ( pSoldier->flags.fDisplayDamage || *psY < gsVIEWPORT_WINDOW_START_Y ) if (pSoldier->flags.fDisplayDamage || *psY < gsVIEWPORT_WINDOW_START_Y)
{ {
*psX = sMercScreenX - ( 80 / 2 ) - pSoldier->sLocatorOffX; *psX = sMercScreenX - (80 / 2) - pSoldier->sLocatorOffX;
*psY = sMercScreenY; *psY = sMercScreenY;
} }
} }
} }
else else
{ {
//Display Text! //Display Text!
*psX = sMercScreenX - ( 80 / 2 ) - pSoldier->sLocatorOffX; *psX = sMercScreenX - (80 / 2) - pSoldier->sLocatorOffX;
*psY = sMercScreenY - sTextBodyTypeYOffset + sStanceOffset; *psY = sMercScreenY - sTextBodyTypeYOffset + sStanceOffset;
} }
} }
@@ -1882,7 +1883,7 @@ void DrawSelectedUIAboveGuy( UINT16 usSoldierID )
return; return;
} }
// Donot show if we are dead // Do not show if we are dead
if ( ( pSoldier->flags.uiStatusFlags & SOLDIER_DEAD ) ) if ( ( pSoldier->flags.uiStatusFlags & SOLDIER_DEAD ) )
{ {
return; return;
@@ -1898,6 +1899,12 @@ void DrawSelectedUIAboveGuy( UINT16 usSoldierID )
SOLDIERTYPE *pVehicle = GetSoldierStructureForVehicle( pSoldier->iVehicleId ); SOLDIERTYPE *pVehicle = GetSoldierStructureForVehicle( pSoldier->iVehicleId );
GetSoldierAboveGuyPositions( pVehicle, &sXPos, &sYPos, FALSE ); GetSoldierAboveGuyPositions( pVehicle, &sXPos, &sYPos, FALSE );
} }
// sevenfm: reduce gap if not showing health bars
if (!gGameExternalOptions.ubShowHealthBarsOnHead)
{
sYPos += 10;
}
// Display name // Display name
SetFont( TINYFONT1 ); SetFont( TINYFONT1 );
@@ -3534,7 +3541,7 @@ void DrawBarsInUIBox( SOLDIERTYPE *pSoldier , INT16 sXPos, INT16 sYPos, INT16 sW
// Draw new size // Draw new size
pDestBuf = LockVideoSurface( FRAME_BUFFER, &uiDestPitchBYTES ); pDestBuf = LockVideoSurface( FRAME_BUFFER, &uiDestPitchBYTES );
// region rysowania barow nad najemnikiem // bar over merc drawing region
SetClippingRegionAndImageWidth( uiDestPitchBYTES, 0, gsVIEWPORT_WINDOW_START_Y, SCREEN_WIDTH, ( gsVIEWPORT_WINDOW_END_Y - gsVIEWPORT_WINDOW_START_Y ) ); SetClippingRegionAndImageWidth( uiDestPitchBYTES, 0, gsVIEWPORT_WINDOW_START_Y, SCREEN_WIDTH, ( gsVIEWPORT_WINDOW_END_Y - gsVIEWPORT_WINDOW_START_Y ) );
// sevenfm: draw background for alt bar // sevenfm: draw background for alt bar