mirror of
https://github.com/1dot13/source.git
synced 2026-08-12 14:10:23 +02:00
Face gear render fixes (#232)
* Face gear is shaded the same as a face * Render continue button above icons and facegear * Face gear rendered below "hatch" (inactivity overlay) * Consistent naming
This commit is contained in:
+305
-281
@@ -62,7 +62,8 @@ void NewEye( FACETYPE *pFace );
|
||||
void NewMouth( FACETYPE *pFace );
|
||||
INT32 GetFreeFace(void);
|
||||
void RecountFaces(void);
|
||||
void HandleRenderFaceAdjustments( FACETYPE *pFace, BOOLEAN fDisplayBuffer, BOOLEAN fUseExternBuffer, UINT32 uiBuffer, INT16 sFaceX, INT16 sFaceY, UINT16 usEyesX, UINT16 usEyesY );
|
||||
UINT32 GetFaceShade(SOLDIERTYPE *pSoldier, FACETYPE *pFace, BOOLEAN fExternBlit);
|
||||
void HandleRenderFaceAdjustments( FACETYPE *pFace, BOOLEAN fDisplayBuffer, BOOLEAN fUseExternBuffer, UINT32 uiBuffer, INT16 sFaceX, INT16 sFaceY, UINT16 usEyesX, UINT16 usEyesY, UINT32 uiFaceShade);
|
||||
|
||||
extern BOOLEAN gfInItemPickupMenu;
|
||||
|
||||
@@ -157,6 +158,32 @@ INT32 InitFace( UINT8 usMercProfileID, UINT8 ubSoldierID, UINT32 uiInitFlags )
|
||||
|
||||
}
|
||||
|
||||
void SetPalettes(HVOBJECT *hVObject, UINT32 uiIndex)
|
||||
{
|
||||
SGPPaletteEntry Pal[256];
|
||||
|
||||
// Build a grayscale palette! ( for testing different looks )
|
||||
for (UINT32 uiCount = 0; uiCount < 256; uiCount++)
|
||||
{
|
||||
Pal[uiCount].peRed = 255;
|
||||
Pal[uiCount].peGreen = 255;
|
||||
Pal[uiCount].peBlue = 255;
|
||||
}
|
||||
|
||||
(*hVObject)->pShades[FLASH_PORTRAIT_NOSHADE] = Create16BPPPaletteShaded((*hVObject)->pPaletteEntry, 255, 255, 255, FALSE);
|
||||
(*hVObject)->pShades[FLASH_PORTRAIT_STARTSHADE] = Create16BPPPaletteShaded(Pal, 255, 255, 255, FALSE);
|
||||
(*hVObject)->pShades[FLASH_PORTRAIT_ENDSHADE] = Create16BPPPaletteShaded((*hVObject)->pPaletteEntry, 250, 25, 25, TRUE);
|
||||
(*hVObject)->pShades[FLASH_PORTRAIT_DARKSHADE] = Create16BPPPaletteShaded((*hVObject)->pPaletteEntry, 100, 100, 100, TRUE);
|
||||
(*hVObject)->pShades[FLASH_PORTRAIT_LITESHADE] = Create16BPPPaletteShaded((*hVObject)->pPaletteEntry, 100, 100, 100, FALSE);
|
||||
|
||||
for (UINT32 uiCount = 0; uiCount < 256; uiCount++)
|
||||
{
|
||||
Pal[uiCount].peRed = (UINT8)(uiCount % 128) + 128;
|
||||
Pal[uiCount].peGreen = (UINT8)(uiCount % 128) + 128;
|
||||
Pal[uiCount].peBlue = (UINT8)(uiCount % 128) + 128;
|
||||
}
|
||||
(*hVObject)->pShades[FLASH_PORTRAIT_GRAYSHADE] = Create16BPPPaletteShaded(Pal, 255, 255, 255, FALSE);
|
||||
}
|
||||
|
||||
INT32 InternalInitFace( UINT8 usMercProfileID, UINT8 ubSoldierID, UINT32 uiInitFlags, INT32 iFaceFileID, UINT32 uiBlinkFrequency, UINT32 uiExpressionFrequency )
|
||||
{
|
||||
@@ -167,7 +194,6 @@ INT32 InternalInitFace( UINT8 usMercProfileID, UINT8 ubSoldierID, UINT32 uiInitF
|
||||
ETRLEObject ETRLEObject;
|
||||
HVOBJECT hVObject;
|
||||
UINT32 uiCount;
|
||||
SGPPaletteEntry Pal[256];
|
||||
|
||||
if( ( iFaceIndex = GetFreeFace() )==(-1) )
|
||||
return(-1);
|
||||
@@ -436,33 +462,11 @@ INT32 InternalInitFace( UINT8 usMercProfileID, UINT8 ubSoldierID, UINT32 uiInitF
|
||||
|
||||
|
||||
// Set palette
|
||||
if( GetVideoObject( &hVObject, uiVideoObject ) )
|
||||
if (GetVideoObject(&hVObject, uiVideoObject))
|
||||
{
|
||||
// Build a grayscale palette! ( for testing different looks )
|
||||
for(uiCount=0; uiCount < 256; uiCount++)
|
||||
{
|
||||
Pal[uiCount].peRed=255;
|
||||
Pal[uiCount].peGreen=255;
|
||||
Pal[uiCount].peBlue=255;
|
||||
}
|
||||
|
||||
hVObject->pShades[ FLASH_PORTRAIT_NOSHADE ] = Create16BPPPaletteShaded( hVObject->pPaletteEntry, 255, 255, 255, FALSE );
|
||||
hVObject->pShades[ FLASH_PORTRAIT_STARTSHADE ] = Create16BPPPaletteShaded( Pal, 255, 255, 255, FALSE );
|
||||
hVObject->pShades[ FLASH_PORTRAIT_ENDSHADE ] = Create16BPPPaletteShaded( hVObject->pPaletteEntry, 250, 25, 25, TRUE );
|
||||
hVObject->pShades[ FLASH_PORTRAIT_DARKSHADE ] = Create16BPPPaletteShaded( hVObject->pPaletteEntry, 100, 100, 100, TRUE );
|
||||
hVObject->pShades[ FLASH_PORTRAIT_LITESHADE ] = Create16BPPPaletteShaded( hVObject->pPaletteEntry, 100, 100, 100, FALSE );
|
||||
|
||||
for(uiCount=0; uiCount < 256; uiCount++)
|
||||
{
|
||||
Pal[uiCount].peRed=(UINT8)(uiCount%128)+128;
|
||||
Pal[uiCount].peGreen=(UINT8)(uiCount%128)+128;
|
||||
Pal[uiCount].peBlue=(UINT8)(uiCount%128)+128;
|
||||
}
|
||||
hVObject->pShades[ FLASH_PORTRAIT_GRAYSHADE ] = Create16BPPPaletteShaded( Pal, 255, 255, 255, FALSE );
|
||||
|
||||
SetPalettes(&hVObject, uiVideoObject);
|
||||
}
|
||||
|
||||
|
||||
// Get FACE height, width
|
||||
if( GetVideoObjectETRLEPropertiesFromIndex( uiVideoObject, &ETRLEObject, 0 ) == FALSE )
|
||||
{
|
||||
@@ -942,9 +946,13 @@ void BlinkAutoFace( INT32 iFaceIndex )
|
||||
{
|
||||
pFace = &gFacesData[ iFaceIndex ];
|
||||
|
||||
UINT32 uiFaceShade = FLASH_PORTRAIT_NOSHADE;
|
||||
|
||||
// CHECK IF BUDDY IS DEAD, UNCONSCIOUS, ASLEEP, OR POW!
|
||||
if ( pFace->ubSoldierID != NOBODY )
|
||||
{
|
||||
uiFaceShade = GetFaceShade(MercPtrs[pFace->ubSoldierID], pFace, FALSE);
|
||||
|
||||
if ( ( MercPtrs[ pFace->ubSoldierID ]->stats.bLife < OKLIFE ) ||
|
||||
( MercPtrs[ pFace->ubSoldierID ]->flags.fMercAsleep == TRUE ) ||
|
||||
( MercPtrs[ pFace->ubSoldierID ]->bAssignment == ASSIGNMENT_POW ) )
|
||||
@@ -1043,8 +1051,7 @@ void BlinkAutoFace( INT32 iFaceIndex )
|
||||
|
||||
}
|
||||
|
||||
HandleRenderFaceAdjustments( pFace, TRUE, FALSE, 0, pFace->usFaceX, pFace->usFaceY, pFace->usEyesX, pFace->usEyesY );
|
||||
|
||||
HandleRenderFaceAdjustments(pFace, TRUE, FALSE, 0, pFace->usFaceX, pFace->usFaceY, pFace->usEyesX, pFace->usEyesY, uiFaceShade);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1228,7 +1235,15 @@ void MouthAutoFace( INT32 iFaceIndex )
|
||||
|
||||
}
|
||||
|
||||
HandleRenderFaceAdjustments( pFace, TRUE, FALSE, 0, pFace->usFaceX, pFace->usFaceY, pFace->usEyesX, pFace->usEyesY );
|
||||
UINT32 uiFaceShade = FLASH_PORTRAIT_NOSHADE;
|
||||
|
||||
// Set shade
|
||||
if (pFace->ubSoldierID != NOBODY)
|
||||
{
|
||||
uiFaceShade = GetFaceShade(MercPtrs[pFace->ubSoldierID], pFace, FALSE);
|
||||
}
|
||||
|
||||
HandleRenderFaceAdjustments( pFace, TRUE, FALSE, 0, pFace->usFaceX, pFace->usFaceY, pFace->usEyesX, pFace->usEyesY, uiFaceShade);
|
||||
|
||||
}
|
||||
}
|
||||
@@ -1317,32 +1332,38 @@ void HandleTalkingAutoFace( INT32 iFaceIndex )
|
||||
|
||||
|
||||
// Local function - uses these variables because they have already been validated
|
||||
void SetFaceShade( SOLDIERTYPE *pSoldier, FACETYPE *pFace, BOOLEAN fExternBlit )
|
||||
void SetFaceShade(FACETYPE *pFace, UINT32 uiFaceShade)
|
||||
{
|
||||
// Set to default
|
||||
SetObjectHandleShade( pFace->uiVideoObject, FLASH_PORTRAIT_NOSHADE );
|
||||
SetObjectHandleShade(pFace->uiVideoObject, uiFaceShade);
|
||||
}
|
||||
|
||||
if ( pFace->iVideoOverlay == -1 && !fExternBlit )
|
||||
UINT32 GetFaceShade(SOLDIERTYPE *pSoldier, FACETYPE *pFace, BOOLEAN fExternBlit)
|
||||
{
|
||||
if (pFace->iVideoOverlay == -1 && !fExternBlit)
|
||||
{
|
||||
if ( ( pSoldier->bActionPoints == 0 ) && !( gTacticalStatus.uiFlags & REALTIME ) && (gTacticalStatus.uiFlags & INCOMBAT ) )
|
||||
if ((pSoldier->bActionPoints == 0) && !(gTacticalStatus.uiFlags & REALTIME) && (gTacticalStatus.uiFlags & INCOMBAT))
|
||||
{
|
||||
SetObjectHandleShade( pFace->uiVideoObject, FLASH_PORTRAIT_LITESHADE );
|
||||
return FLASH_PORTRAIT_LITESHADE;
|
||||
}
|
||||
}
|
||||
|
||||
if ( pSoldier->stats.bLife < OKLIFE )
|
||||
if (pSoldier->stats.bLife < OKLIFE)
|
||||
{
|
||||
SetObjectHandleShade( pFace->uiVideoObject, FLASH_PORTRAIT_DARKSHADE );
|
||||
return FLASH_PORTRAIT_DARKSHADE;
|
||||
}
|
||||
|
||||
// ATE: Don't shade for damage if blitting extern face...
|
||||
if ( !fExternBlit )
|
||||
if (!fExternBlit)
|
||||
{
|
||||
if ( pSoldier->flags.fFlashPortrait == FLASH_PORTRAIT_START )
|
||||
if (pSoldier->flags.fFlashPortrait == FLASH_PORTRAIT_START)
|
||||
{
|
||||
SetObjectHandleShade( pFace->uiVideoObject, pSoldier->bFlashPortraitFrame );
|
||||
return pSoldier->bFlashPortraitFrame;
|
||||
}
|
||||
}
|
||||
|
||||
// Set to default
|
||||
return FLASH_PORTRAIT_NOSHADE;
|
||||
}
|
||||
|
||||
BOOLEAN RenderAutoFaceFromSoldier( UINT8 ubSoldierID )
|
||||
@@ -1450,45 +1471,46 @@ void DoRightIcon_legion_GAS_MASK( UINT32 uiRenderBuffer, FACETYPE *pFace, INT16
|
||||
|
||||
}
|
||||
*/
|
||||
void GetXYForRightIconPlacement_FaceGera( FACETYPE *pFace, UINT16 ubIndex, INT16 sFaceX, INT16 sFaceY, INT16 *psX, INT16 *psY, INT8 bNumIcons , UINT32 uIDFaceGear, BOOLEAN isIMP)
|
||||
void GetXYForRightIconPlacement_FaceGear(FACETYPE *pFace, UINT16 ubIndex, INT16 sFaceX, INT16 sFaceY, INT16 *psX, INT16 *psY, INT8 bNumIcons, UINT32 uiFaceGearIndex, UINT32 uiFaceShade)
|
||||
{
|
||||
INT16 sX, sY;
|
||||
UINT16 usWidth, usHeight;
|
||||
ETRLEObject *pTrav;
|
||||
HVOBJECT hVObject;
|
||||
ETRLEObject *pTrav;
|
||||
HVOBJECT hVObject = nullptr;
|
||||
|
||||
// Get height, width of icon...
|
||||
if (isIMP)
|
||||
GetVideoObject( &hVObject, zNewFaceGearIMP[uIDFaceGear].uiIndex );
|
||||
else
|
||||
GetVideoObject( &hVObject, zNewFaceGear[uIDFaceGear].uiIndex );
|
||||
|
||||
pTrav = &(hVObject->pETRLEObject[ ubIndex ] );
|
||||
usHeight = pTrav->usHeight;
|
||||
usWidth = pTrav->usWidth;
|
||||
if (GetVideoObject(&hVObject, uiFaceGearIndex))
|
||||
{
|
||||
SetPalettes(&hVObject, uiFaceGearIndex);
|
||||
}
|
||||
|
||||
sX = sFaceX + ( usWidth * bNumIcons );
|
||||
SetObjectShade(hVObject, uiFaceShade);
|
||||
|
||||
pTrav = &(hVObject->pETRLEObject[ubIndex]);
|
||||
usHeight = pTrav->usHeight;
|
||||
usWidth = pTrav->usWidth;
|
||||
|
||||
sX = sFaceX + (usWidth * bNumIcons);
|
||||
sY = sFaceY + pFace->usFaceHeight - usHeight;
|
||||
|
||||
*psX = sX;
|
||||
*psY = sY;
|
||||
}
|
||||
|
||||
void DoRightIcon_FaceGear( UINT32 uiRenderBuffer, FACETYPE *pFace, INT16 sFaceX, INT16 sFaceY, INT8 bNumIcons, UINT8 sIconIndex , UINT32 uIDFaceGear, BOOLEAN isIMP)
|
||||
void DoRightIcon_FaceGear(UINT32 uiRenderBuffer, FACETYPE *pFace, INT16 sFaceX, INT16 sFaceY, INT8 bNumIcons, UINT8 sIconIndex, UINT32 uIDFaceGear, BOOLEAN isIMP, UINT32 uiFaceShade)
|
||||
{
|
||||
INT16 sIconX, sIconY;
|
||||
INT16 sIconX, sIconY;
|
||||
|
||||
// Find X, y for placement
|
||||
|
||||
if (isIMP)
|
||||
{
|
||||
GetXYForRightIconPlacement_FaceGera( pFace, sIconIndex, sFaceX, sFaceY, &sIconX, &sIconY, bNumIcons , uIDFaceGear,isIMP);
|
||||
BltVideoObjectFromIndex( uiRenderBuffer, zNewFaceGearIMP[uIDFaceGear].uiIndex, sIconIndex, sIconX, sIconY, VO_BLT_SRCTRANSPARENCY, NULL );
|
||||
GetXYForRightIconPlacement_FaceGear(pFace, sIconIndex, sFaceX, sFaceY, &sIconX, &sIconY, bNumIcons, zNewFaceGearIMP[uIDFaceGear].uiIndex, uiFaceShade);
|
||||
BltVideoObjectFromIndex(uiRenderBuffer, zNewFaceGearIMP[uIDFaceGear].uiIndex, sIconIndex, sIconX, sIconY, VO_BLT_SRCTRANSPARENCY, NULL);
|
||||
}
|
||||
else
|
||||
{
|
||||
GetXYForRightIconPlacement_FaceGera( pFace, sIconIndex, sFaceX, sFaceY, &sIconX, &sIconY, bNumIcons , uIDFaceGear,isIMP);
|
||||
BltVideoObjectFromIndex( uiRenderBuffer, zNewFaceGear[uIDFaceGear].uiIndex, sIconIndex, sIconX, sIconY, VO_BLT_SRCTRANSPARENCY, NULL );
|
||||
GetXYForRightIconPlacement_FaceGear(pFace, sIconIndex, sFaceX, sFaceY, &sIconX, &sIconY, bNumIcons, zNewFaceGear[uIDFaceGear].uiIndex, uiFaceShade);
|
||||
BltVideoObjectFromIndex(uiRenderBuffer, zNewFaceGear[uIDFaceGear].uiIndex, sIconIndex, sIconX, sIconY, VO_BLT_SRCTRANSPARENCY, NULL);
|
||||
}
|
||||
}
|
||||
//----------------------------------------------------------------
|
||||
@@ -1548,7 +1570,7 @@ void DoRightIcon( UINT32 uiRenderBuffer, FACETYPE *pFace, INT16 sFaceX, INT16 sF
|
||||
}
|
||||
|
||||
|
||||
void HandleRenderFaceAdjustments( FACETYPE *pFace, BOOLEAN fDisplayBuffer, BOOLEAN fUseExternBuffer, UINT32 uiBuffer, INT16 sFaceX, INT16 sFaceY, UINT16 usEyesX, UINT16 usEyesY )
|
||||
void HandleRenderFaceAdjustments( FACETYPE *pFace, BOOLEAN fDisplayBuffer, BOOLEAN fUseExternBuffer, UINT32 uiBuffer, INT16 sFaceX, INT16 sFaceY, UINT16 usEyesX, UINT16 usEyesY, UINT32 uiFaceShade)
|
||||
{
|
||||
INT16 sIconX, sIconY;
|
||||
INT16 sIconIndex = -1;
|
||||
@@ -1612,6 +1634,190 @@ void HandleRenderFaceAdjustments( FACETYPE *pFace, BOOLEAN fDisplayBuffer, BOOLE
|
||||
{
|
||||
pSoldier = MercPtrs[ pFace->ubSoldierID ];
|
||||
|
||||
UINT8 faceProfileId = gMercProfiles[pSoldier->ubProfile].ubFaceIndex;
|
||||
BOOLEAN isIMP = gMercProfiles[pSoldier->ubProfile].Type == PROFILETYPE_IMP;
|
||||
|
||||
if (gGameSettings.fOptions[TOPTION_SHOW_TACTICAL_FACE_GEAR] && MercPtrs[pFace->ubSoldierID]->stats.bLife > 0 && !(pFace->uiFlags & FACE_BIGFACE))
|
||||
{
|
||||
if (MercPtrs[pFace->ubSoldierID]->inv[HELMETPOS].usItem > 0)
|
||||
{
|
||||
uiFaceItemOne = MercPtrs[pFace->ubSoldierID]->inv[HELMETPOS].usItem;
|
||||
|
||||
if (uiFaceItemOne != NONE && zNewFaceGear[uiFaceItemOne].Type == 1) //back
|
||||
{
|
||||
DoRightIcon_FaceGear(uiRenderBuffer, pFace, sFaceX, sFaceY, bNumRightIcons_legion, faceProfileId, uiFaceItemOne, isIMP, uiFaceShade);
|
||||
}
|
||||
}
|
||||
|
||||
// this section chooses the pictures for gas mask and NV goggles if the ini setting "SHOW_TACTICAL_FACE_GEAR" is TRUE
|
||||
// and the merc actually wears something to be shown
|
||||
if (MercPtrs[pFace->ubSoldierID]->inv[HEAD1POS].usItem + MercPtrs[pFace->ubSoldierID]->inv[HEAD2POS].usItem > 0)
|
||||
{
|
||||
// WANNE: Removed the limitation
|
||||
// silversurfer: don't overwrite icons if they shall be shown!
|
||||
//if ( !gGameSettings.fOptions[ SHOW_TACTICAL_FACE_ICONS ] )
|
||||
{
|
||||
uiFaceItemOne = MercPtrs[pFace->ubSoldierID]->inv[HEAD1POS].usItem;
|
||||
uiFaceItemTwo = MercPtrs[pFace->ubSoldierID]->inv[HEAD2POS].usItem;
|
||||
|
||||
uiFaceOne = MercPtrs[pFace->ubSoldierID]->inv[HEAD1POS].usItem;
|
||||
uiFaceTwo = MercPtrs[pFace->ubSoldierID]->inv[HEAD2POS].usItem;
|
||||
|
||||
// check first face slot
|
||||
if (uiFaceItemOne != NONE)
|
||||
{
|
||||
if (zNewFaceGear[uiFaceOne].Type == 3)
|
||||
{
|
||||
uiFaceItemOne = 1;
|
||||
}
|
||||
else if (zNewFaceGear[uiFaceOne].Type == 4)
|
||||
{
|
||||
uiFaceItemOne = 2;
|
||||
}
|
||||
else uiFaceItemOne = 0;
|
||||
}
|
||||
|
||||
// check second face slot
|
||||
if (uiFaceItemTwo != NONE)
|
||||
{
|
||||
if (zNewFaceGear[uiFaceTwo].Type == 3)
|
||||
{
|
||||
uiFaceItemTwo = 21;
|
||||
}
|
||||
else if (zNewFaceGear[uiFaceTwo].Type == 4)
|
||||
{
|
||||
uiFaceItemTwo = 42;
|
||||
}
|
||||
else uiFaceItemTwo = 0;
|
||||
}
|
||||
|
||||
|
||||
// Now select the correct picture. This uses a matrix from uiFaceOneItem and uiFaceTwoItem (simple addition)
|
||||
// the numbers on the outer border are used if that is the only item worn in that slot
|
||||
//
|
||||
// 21 42 63 84
|
||||
// face slot 1 \ slot 2 gas mask | NV goggles | sun goggles | extended ear
|
||||
// 1 gas mask -- 43 64 85
|
||||
// 2 NV goggles 23 -- -- 86
|
||||
// 3 sun goggles 24 -- -- 87
|
||||
// 4 extended ear 25 46 67 --
|
||||
//
|
||||
// this matrix leaves room for expansion
|
||||
// we only need a few of the matrix' values this time because we only show gas mask or NV goggles pictures
|
||||
ubFaceItemsCombined = uiFaceItemOne + uiFaceItemTwo;
|
||||
}
|
||||
|
||||
// WANNE: Removed silversurfers limitation, because it is too complex for the players :)
|
||||
// silversurfer: we don't want to display icons for gas mask or NV goggles because you can actually see the merc wearing the gear
|
||||
// in case of gas mask together with NV we display the picture of the item in face slot 1 and the icon of the item
|
||||
// in face slot 2 (if icons are allowed)
|
||||
|
||||
//Type : 3 - gas mask ; 4 - NV googles
|
||||
// gas mask only
|
||||
|
||||
if (ubFaceItemsCombined == 1 || ubFaceItemsCombined == 21)
|
||||
{
|
||||
if (zNewFaceGear[uiFaceOne].Type == 3)
|
||||
{
|
||||
DoRightIcon_FaceGear(uiRenderBuffer, pFace, sFaceX, sFaceY, bNumRightIcons_legion, faceProfileId, uiFaceOne, isIMP, uiFaceShade);
|
||||
}
|
||||
else if (zNewFaceGear[uiFaceTwo].Type == 3)
|
||||
{
|
||||
DoRightIcon_FaceGear(uiRenderBuffer, pFace, sFaceX, sFaceY, bNumRightIcons_legion, faceProfileId, uiFaceTwo, isIMP, uiFaceShade);
|
||||
}
|
||||
}
|
||||
|
||||
// NV goggles only
|
||||
if (ubFaceItemsCombined == 2 || ubFaceItemsCombined == 42)
|
||||
{
|
||||
if (zNewFaceGear[uiFaceOne].Type == 4)
|
||||
{
|
||||
DoRightIcon_FaceGear(uiRenderBuffer, pFace, sFaceX, sFaceY, bNumRightIcons_legion, faceProfileId, uiFaceOne, isIMP, uiFaceShade);
|
||||
}
|
||||
else if (zNewFaceGear[uiFaceTwo].Type == 4)
|
||||
{
|
||||
DoRightIcon_FaceGear(uiRenderBuffer, pFace, sFaceX, sFaceY, bNumRightIcons_legion, faceProfileId, uiFaceTwo, isIMP, uiFaceShade);
|
||||
}
|
||||
}
|
||||
|
||||
// NV goggles + gas mask
|
||||
if (ubFaceItemsCombined == 23)
|
||||
{
|
||||
if (zNewFaceGear[uiFaceOne].Type == 4 && zNewFaceGear[uiFaceTwo].Type == 3)
|
||||
{
|
||||
DoRightIcon_FaceGear(uiRenderBuffer, pFace, sFaceX, sFaceY, bNumRightIcons_legion, faceProfileId, uiFaceTwo, isIMP, uiFaceShade);
|
||||
DoRightIcon_FaceGear(uiRenderBuffer, pFace, sFaceX, sFaceY, bNumRightIcons_legion, faceProfileId, uiFaceOne, isIMP, uiFaceShade);
|
||||
}
|
||||
}
|
||||
|
||||
// gas mask + NV goggles
|
||||
if (ubFaceItemsCombined == 43)
|
||||
{
|
||||
if (zNewFaceGear[uiFaceOne].Type == 3 && zNewFaceGear[uiFaceTwo].Type == 4)
|
||||
{
|
||||
DoRightIcon_FaceGear(uiRenderBuffer, pFace, sFaceX, sFaceY, bNumRightIcons_legion, faceProfileId, uiFaceOne, isIMP, uiFaceShade);
|
||||
DoRightIcon_FaceGear(uiRenderBuffer, pFace, sFaceX, sFaceY, bNumRightIcons_legion, faceProfileId, uiFaceTwo, isIMP, uiFaceShade);
|
||||
}
|
||||
}
|
||||
|
||||
// gas mask + extended ear
|
||||
if (ubFaceItemsCombined == 24 || ubFaceItemsCombined == 64)
|
||||
{
|
||||
if (zNewFaceGear[uiFaceOne].Type == 3)
|
||||
{
|
||||
DoRightIcon_FaceGear(uiRenderBuffer, pFace, sFaceX, sFaceY, bNumRightIcons_legion, faceProfileId, uiFaceOne, isIMP, uiFaceShade);
|
||||
}
|
||||
else if (zNewFaceGear[uiFaceTwo].Type == 3)
|
||||
{
|
||||
DoRightIcon_FaceGear(uiRenderBuffer, pFace, sFaceX, sFaceY, bNumRightIcons_legion, faceProfileId, uiFaceTwo, isIMP, uiFaceShade);
|
||||
}
|
||||
}
|
||||
|
||||
// gas mask + extended ear
|
||||
if (ubFaceItemsCombined == 25 || ubFaceItemsCombined == 85)
|
||||
{
|
||||
if (zNewFaceGear[uiFaceOne].Type == 3)
|
||||
{
|
||||
DoRightIcon_FaceGear(uiRenderBuffer, pFace, sFaceX, sFaceY, bNumRightIcons_legion, faceProfileId, uiFaceOne, isIMP, uiFaceShade);
|
||||
}
|
||||
else if (zNewFaceGear[uiFaceTwo].Type == 3)
|
||||
{
|
||||
DoRightIcon_FaceGear(uiRenderBuffer, pFace, sFaceX, sFaceY, bNumRightIcons_legion, faceProfileId, uiFaceTwo, isIMP, uiFaceShade);
|
||||
}
|
||||
}
|
||||
|
||||
// NV goggles + extended ear
|
||||
if (ubFaceItemsCombined == 46 || ubFaceItemsCombined == 86)
|
||||
{
|
||||
if (zNewFaceGear[uiFaceOne].Type == 4)
|
||||
{
|
||||
DoRightIcon_FaceGear(uiRenderBuffer, pFace, sFaceX, sFaceY, bNumRightIcons_legion, faceProfileId, uiFaceOne, isIMP, uiFaceShade);
|
||||
}
|
||||
else if (zNewFaceGear[uiFaceTwo].Type == 4)
|
||||
{
|
||||
DoRightIcon_FaceGear(uiRenderBuffer, pFace, sFaceX, sFaceY, bNumRightIcons_legion, faceProfileId, uiFaceTwo, isIMP, uiFaceShade);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (MercPtrs[pFace->ubSoldierID]->inv[HELMETPOS].usItem > 0)
|
||||
// dirty hack for IMPs because they don't have pictures for face gear
|
||||
// && ( MercPtrs[ pFace->ubSoldierID ]->ubProfile < 51 || MercPtrs[ pFace->ubSoldierID ]->ubProfile > 56 )
|
||||
{
|
||||
uiFaceItemOne = MercPtrs[pFace->ubSoldierID]->inv[HELMETPOS].usItem;
|
||||
|
||||
if (uiFaceItemOne != NONE)
|
||||
{
|
||||
if (uiFaceItemOne != NONE && zNewFaceGear[uiFaceItemOne].Type == 2) //front
|
||||
{
|
||||
DoRightIcon_FaceGear(uiRenderBuffer, pFace, sFaceX, sFaceY, bNumRightIcons_legion, faceProfileId, uiFaceItemOne, isIMP, uiFaceShade);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//------------------------------------end of tactical face gear-----------------------------
|
||||
}
|
||||
|
||||
if ( (MercPtrs[pFace->ubSoldierID]->stats.bLife < CONSCIOUSNESS || MercPtrs[pFace->ubSoldierID]->flags.fDeadPanel ) )
|
||||
{
|
||||
// Blit Closed eyes here!
|
||||
@@ -1707,34 +1913,6 @@ void HandleRenderFaceAdjustments( FACETYPE *pFace, BOOLEAN fDisplayBuffer, BOOLE
|
||||
// Blit hatch!
|
||||
BltVideoObjectFromIndex( uiRenderBuffer, guiHATCH, 0, sFaceX, sFaceY, VO_BLT_SRCTRANSPARENCY, NULL );
|
||||
}
|
||||
|
||||
if ( !pFace->fDisabled && !pFace->fInvalidAnim )
|
||||
{
|
||||
// Render text above here if that's what was asked for
|
||||
if ( pFace->fDisplayTextOver != FACE_NO_TEXT_OVER )
|
||||
{
|
||||
SetFont( TINYFONT1 );
|
||||
SetFontBackground( FONT_MCOLOR_BLACK );
|
||||
SetFontForeground( FONT_MCOLOR_WHITE );
|
||||
|
||||
SetFontDestBuffer( uiRenderBuffer, 0, 0, SCREEN_WIDTH, SCREEN_HEIGHT, FALSE );
|
||||
|
||||
VarFindFontCenterCoordinates( sFaceX, sFaceY, pFace->usFaceWidth, pFace->usFaceHeight, TINYFONT1, &sFontX, &sFontY, pFace->zDisplayText );
|
||||
|
||||
if ( pFace->fDisplayTextOver == FACE_DRAW_TEXT_OVER )
|
||||
{
|
||||
gprintfinvalidate( sFontX, sFontY, pFace->zDisplayText );
|
||||
mprintf( sFontX, sFontY, pFace->zDisplayText );
|
||||
}
|
||||
else if ( pFace->fDisplayTextOver == FACE_ERASE_TEXT_OVER )
|
||||
{
|
||||
gprintfRestore( sFontX, sFontY, pFace->zDisplayText );
|
||||
pFace->fDisplayTextOver = FACE_NO_TEXT_OVER;
|
||||
}
|
||||
|
||||
SetFontDestBuffer( FRAME_BUFFER, 0, 0, SCREEN_WIDTH, SCREEN_HEIGHT, FALSE );
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// sevenfm: only show for alive soldiers, no face icons for big faces
|
||||
@@ -1760,15 +1938,6 @@ void HandleRenderFaceAdjustments( FACETYPE *pFace, BOOLEAN fDisplayBuffer, BOOLE
|
||||
|
||||
//------------------------------------Legion 2 by jazz--------------------------------
|
||||
|
||||
UINT8 faceProfileId = gMercProfiles[MercPtrs[pFace->ubSoldierID]->ubProfile].ubFaceIndex;
|
||||
BOOLEAN isIMP = FALSE;
|
||||
|
||||
//IMP
|
||||
if (gMercProfiles[MercPtrs[pFace->ubSoldierID]->ubProfile].Type == PROFILETYPE_IMP)
|
||||
{
|
||||
isIMP = TRUE;
|
||||
}
|
||||
|
||||
// rewritten by silversurfer
|
||||
// this section chooses the icons for face gear if the ini setting "SHOW_TACTICAL_FACE_ICONS" is TRUE
|
||||
// and the merc actually wears something to be shown
|
||||
@@ -1883,187 +2052,6 @@ void HandleRenderFaceAdjustments( FACETYPE *pFace, BOOLEAN fDisplayBuffer, BOOLE
|
||||
}
|
||||
}
|
||||
|
||||
if (gGameSettings.fOptions[TOPTION_SHOW_TACTICAL_FACE_GEAR])
|
||||
{
|
||||
if (MercPtrs[pFace->ubSoldierID]->inv[HELMETPOS].usItem > 0)
|
||||
{
|
||||
uiFaceItemOne = MercPtrs[pFace->ubSoldierID]->inv[HELMETPOS].usItem;
|
||||
|
||||
if (uiFaceItemOne != NONE && zNewFaceGear[uiFaceItemOne].Type == 1) //back
|
||||
{
|
||||
DoRightIcon_FaceGear(uiRenderBuffer, pFace, sFaceX, sFaceY, bNumRightIcons_legion, faceProfileId, uiFaceItemOne, isIMP);
|
||||
}
|
||||
}
|
||||
|
||||
// this section chooses the pictures for gas mask and NV goggles if the ini setting "SHOW_TACTICAL_FACE_GEAR" is TRUE
|
||||
// and the merc actually wears something to be shown
|
||||
if (MercPtrs[pFace->ubSoldierID]->inv[HEAD1POS].usItem + MercPtrs[pFace->ubSoldierID]->inv[HEAD2POS].usItem > 0)
|
||||
{
|
||||
// WANNE: Removed the limitation
|
||||
// silversurfer: don't overwrite icons if they shall be shown!
|
||||
//if ( !gGameSettings.fOptions[ SHOW_TACTICAL_FACE_ICONS ] )
|
||||
{
|
||||
uiFaceItemOne = MercPtrs[pFace->ubSoldierID]->inv[HEAD1POS].usItem;
|
||||
uiFaceItemTwo = MercPtrs[pFace->ubSoldierID]->inv[HEAD2POS].usItem;
|
||||
|
||||
uiFaceOne = MercPtrs[pFace->ubSoldierID]->inv[HEAD1POS].usItem;
|
||||
uiFaceTwo = MercPtrs[pFace->ubSoldierID]->inv[HEAD2POS].usItem;
|
||||
|
||||
// check first face slot
|
||||
if (uiFaceItemOne != NONE)
|
||||
{
|
||||
if (zNewFaceGear[uiFaceOne].Type == 3)
|
||||
{
|
||||
uiFaceItemOne = 1;
|
||||
}
|
||||
else if (zNewFaceGear[uiFaceOne].Type == 4)
|
||||
{
|
||||
uiFaceItemOne = 2;
|
||||
}
|
||||
else uiFaceItemOne = 0;
|
||||
}
|
||||
|
||||
// check second face slot
|
||||
if (uiFaceItemTwo != NONE)
|
||||
{
|
||||
if (zNewFaceGear[uiFaceTwo].Type == 3)
|
||||
{
|
||||
uiFaceItemTwo = 21;
|
||||
}
|
||||
else if (zNewFaceGear[uiFaceTwo].Type == 4)
|
||||
{
|
||||
uiFaceItemTwo = 42;
|
||||
}
|
||||
else uiFaceItemTwo = 0;
|
||||
}
|
||||
|
||||
|
||||
// Now select the correct picture. This uses a matrix from uiFaceOneItem and uiFaceTwoItem (simple addition)
|
||||
// the numbers on the outer border are used if that is the only item worn in that slot
|
||||
//
|
||||
// 21 42 63 84
|
||||
// face slot 1 \ slot 2 gas mask | NV goggles | sun goggles | extended ear
|
||||
// 1 gas mask -- 43 64 85
|
||||
// 2 NV goggles 23 -- -- 86
|
||||
// 3 sun goggles 24 -- -- 87
|
||||
// 4 extended ear 25 46 67 --
|
||||
//
|
||||
// this matrix leaves room for expansion
|
||||
// we only need a few of the matrix' values this time because we only show gas mask or NV goggles pictures
|
||||
ubFaceItemsCombined = uiFaceItemOne + uiFaceItemTwo;
|
||||
}
|
||||
|
||||
// WANNE: Removed silversurfers limitation, because it is too complex for the players :)
|
||||
// silversurfer: we don't want to display icons for gas mask or NV goggles because you can actually see the merc wearing the gear
|
||||
// in case of gas mask together with NV we display the picture of the item in face slot 1 and the icon of the item
|
||||
// in face slot 2 (if icons are allowed)
|
||||
|
||||
//Type : 3 - gas mask ; 4 - NV googles
|
||||
// gas mask only
|
||||
|
||||
if (ubFaceItemsCombined == 1 || ubFaceItemsCombined == 21)
|
||||
{
|
||||
if (zNewFaceGear[uiFaceOne].Type == 3)
|
||||
{
|
||||
DoRightIcon_FaceGear(uiRenderBuffer, pFace, sFaceX, sFaceY, bNumRightIcons_legion, faceProfileId, uiFaceOne, isIMP);
|
||||
}
|
||||
else if (zNewFaceGear[uiFaceTwo].Type == 3)
|
||||
{
|
||||
DoRightIcon_FaceGear(uiRenderBuffer, pFace, sFaceX, sFaceY, bNumRightIcons_legion, faceProfileId, uiFaceTwo, isIMP);
|
||||
}
|
||||
}
|
||||
|
||||
// NV goggles only
|
||||
if (ubFaceItemsCombined == 2 || ubFaceItemsCombined == 42)
|
||||
{
|
||||
if (zNewFaceGear[uiFaceOne].Type == 4)
|
||||
{
|
||||
DoRightIcon_FaceGear(uiRenderBuffer, pFace, sFaceX, sFaceY, bNumRightIcons_legion, faceProfileId, uiFaceOne, isIMP);
|
||||
}
|
||||
else if (zNewFaceGear[uiFaceTwo].Type == 4)
|
||||
{
|
||||
DoRightIcon_FaceGear(uiRenderBuffer, pFace, sFaceX, sFaceY, bNumRightIcons_legion, faceProfileId, uiFaceTwo, isIMP);
|
||||
}
|
||||
}
|
||||
|
||||
// NV goggles + gas mask
|
||||
if (ubFaceItemsCombined == 23)
|
||||
{
|
||||
if (zNewFaceGear[uiFaceOne].Type == 4 && zNewFaceGear[uiFaceTwo].Type == 3)
|
||||
{
|
||||
DoRightIcon_FaceGear(uiRenderBuffer, pFace, sFaceX, sFaceY, bNumRightIcons_legion, faceProfileId, uiFaceTwo, isIMP);
|
||||
DoRightIcon_FaceGear(uiRenderBuffer, pFace, sFaceX, sFaceY, bNumRightIcons_legion, faceProfileId, uiFaceOne, isIMP);
|
||||
}
|
||||
}
|
||||
|
||||
// gas mask + NV goggles
|
||||
if (ubFaceItemsCombined == 43)
|
||||
{
|
||||
if (zNewFaceGear[uiFaceOne].Type == 3 && zNewFaceGear[uiFaceTwo].Type == 4)
|
||||
{
|
||||
DoRightIcon_FaceGear(uiRenderBuffer, pFace, sFaceX, sFaceY, bNumRightIcons_legion, faceProfileId, uiFaceOne, isIMP);
|
||||
DoRightIcon_FaceGear(uiRenderBuffer, pFace, sFaceX, sFaceY, bNumRightIcons_legion, faceProfileId, uiFaceTwo, isIMP);
|
||||
}
|
||||
}
|
||||
|
||||
// gas mask + extended ear
|
||||
if (ubFaceItemsCombined == 24 || ubFaceItemsCombined == 64)
|
||||
{
|
||||
if (zNewFaceGear[uiFaceOne].Type == 3)
|
||||
{
|
||||
DoRightIcon_FaceGear(uiRenderBuffer, pFace, sFaceX, sFaceY, bNumRightIcons_legion, faceProfileId, uiFaceOne, isIMP);
|
||||
}
|
||||
else if (zNewFaceGear[uiFaceTwo].Type == 3)
|
||||
{
|
||||
DoRightIcon_FaceGear(uiRenderBuffer, pFace, sFaceX, sFaceY, bNumRightIcons_legion, faceProfileId, uiFaceTwo, isIMP);
|
||||
}
|
||||
}
|
||||
|
||||
// gas mask + extended ear
|
||||
if (ubFaceItemsCombined == 25 || ubFaceItemsCombined == 85)
|
||||
{
|
||||
if (zNewFaceGear[uiFaceOne].Type == 3)
|
||||
{
|
||||
DoRightIcon_FaceGear(uiRenderBuffer, pFace, sFaceX, sFaceY, bNumRightIcons_legion, faceProfileId, uiFaceOne, isIMP);
|
||||
}
|
||||
else if (zNewFaceGear[uiFaceTwo].Type == 3)
|
||||
{
|
||||
DoRightIcon_FaceGear(uiRenderBuffer, pFace, sFaceX, sFaceY, bNumRightIcons_legion, faceProfileId, uiFaceTwo, isIMP);
|
||||
}
|
||||
}
|
||||
|
||||
// NV goggles + extended ear
|
||||
if (ubFaceItemsCombined == 46 || ubFaceItemsCombined == 86)
|
||||
{
|
||||
if (zNewFaceGear[uiFaceOne].Type == 4)
|
||||
{
|
||||
DoRightIcon_FaceGear(uiRenderBuffer, pFace, sFaceX, sFaceY, bNumRightIcons_legion, faceProfileId, uiFaceOne, isIMP);
|
||||
}
|
||||
else if (zNewFaceGear[uiFaceTwo].Type == 4)
|
||||
{
|
||||
DoRightIcon_FaceGear(uiRenderBuffer, pFace, sFaceX, sFaceY, bNumRightIcons_legion, faceProfileId, uiFaceTwo, isIMP);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (MercPtrs[pFace->ubSoldierID]->inv[HELMETPOS].usItem > 0)
|
||||
// dirty hack for IMPs because they don't have pictures for face gear
|
||||
// && ( MercPtrs[ pFace->ubSoldierID ]->ubProfile < 51 || MercPtrs[ pFace->ubSoldierID ]->ubProfile > 56 )
|
||||
{
|
||||
uiFaceItemOne = MercPtrs[pFace->ubSoldierID]->inv[HELMETPOS].usItem;
|
||||
|
||||
if (uiFaceItemOne != NONE)
|
||||
{
|
||||
if (uiFaceItemOne != NONE && zNewFaceGear[uiFaceItemOne].Type == 2) //front
|
||||
{
|
||||
DoRightIcon_FaceGear(uiRenderBuffer, pFace, sFaceX, sFaceY, bNumRightIcons_legion, faceProfileId, uiFaceItemOne, isIMP);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//------------------------------------end of tactical face gear-----------------------------
|
||||
}
|
||||
|
||||
// If blind...
|
||||
if (MercPtrs[pFace->ubSoldierID]->bBlindedCounter > 0)
|
||||
{
|
||||
@@ -2542,6 +2530,37 @@ void HandleRenderFaceAdjustments( FACETYPE *pFace, BOOLEAN fDisplayBuffer, BOOLE
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (!(pFace->uiFlags & FACE_INACTIVE_HANDLED_ELSEWHERE) || fUseExternBuffer)
|
||||
{
|
||||
if (!pFace->fDisabled && !pFace->fInvalidAnim)
|
||||
{
|
||||
// Render text above here if that's what was asked for
|
||||
if (pFace->fDisplayTextOver != FACE_NO_TEXT_OVER)
|
||||
{
|
||||
SetFont(TINYFONT1);
|
||||
SetFontBackground(FONT_MCOLOR_BLACK);
|
||||
SetFontForeground(FONT_MCOLOR_WHITE);
|
||||
|
||||
SetFontDestBuffer(uiRenderBuffer, 0, 0, SCREEN_WIDTH, SCREEN_HEIGHT, FALSE);
|
||||
|
||||
VarFindFontCenterCoordinates(sFaceX, sFaceY, pFace->usFaceWidth, pFace->usFaceHeight, TINYFONT1, &sFontX, &sFontY, pFace->zDisplayText);
|
||||
|
||||
if (pFace->fDisplayTextOver == FACE_DRAW_TEXT_OVER)
|
||||
{
|
||||
gprintfinvalidate(sFontX, sFontY, pFace->zDisplayText);
|
||||
mprintf(sFontX, sFontY, pFace->zDisplayText);
|
||||
}
|
||||
else if (pFace->fDisplayTextOver == FACE_ERASE_TEXT_OVER)
|
||||
{
|
||||
gprintfRestore(sFontX, sFontY, pFace->zDisplayText);
|
||||
pFace->fDisplayTextOver = FACE_NO_TEXT_OVER;
|
||||
}
|
||||
|
||||
SetFontDestBuffer(FRAME_BUFFER, 0, 0, SCREEN_WIDTH, SCREEN_HEIGHT, FALSE);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -2601,10 +2620,13 @@ BOOLEAN RenderAutoFace( INT32 iFaceIndex )
|
||||
// Check for disabled guy!
|
||||
CHECKF( pFace->fDisabled != TRUE );
|
||||
|
||||
UINT32 uiFaceShade = FLASH_PORTRAIT_NOSHADE;
|
||||
|
||||
// Set shade
|
||||
if ( pFace->ubSoldierID != NOBODY )
|
||||
{
|
||||
SetFaceShade( MercPtrs[ pFace->ubSoldierID ], pFace, FALSE );
|
||||
uiFaceShade = GetFaceShade(MercPtrs[pFace->ubSoldierID], pFace, FALSE);
|
||||
SetFaceShade(pFace, uiFaceShade);
|
||||
}
|
||||
|
||||
// Blit face to save buffer!
|
||||
@@ -2620,7 +2642,7 @@ BOOLEAN RenderAutoFace( INT32 iFaceIndex )
|
||||
}
|
||||
}
|
||||
|
||||
HandleRenderFaceAdjustments( pFace, FALSE, FALSE, 0, pFace->usFaceX, pFace->usFaceY, pFace->usEyesX, pFace->usEyesY );
|
||||
HandleRenderFaceAdjustments(pFace, FALSE, FALSE, 0, pFace->usFaceX, pFace->usFaceY, pFace->usEyesX, pFace->usEyesY, uiFaceShade);
|
||||
|
||||
// Restore extern rect
|
||||
if ( pFace->uiAutoRestoreBuffer == guiSAVEBUFFER )
|
||||
@@ -2664,9 +2686,11 @@ BOOLEAN ExternRenderFace( UINT32 uiBuffer, INT32 iFaceIndex, INT16 sX, INT16 sY
|
||||
// Here, any face can be rendered, even if disabled
|
||||
|
||||
// Set shade
|
||||
UINT32 uiFaceShade = FLASH_PORTRAIT_NOSHADE;
|
||||
if ( pFace->ubSoldierID != NOBODY )
|
||||
{
|
||||
SetFaceShade( MercPtrs[ pFace->ubSoldierID ], pFace , TRUE );
|
||||
uiFaceShade = GetFaceShade(MercPtrs[pFace->ubSoldierID], pFace, TRUE);
|
||||
SetFaceShade(pFace, uiFaceShade);
|
||||
}
|
||||
|
||||
// Blit face to save buffer!
|
||||
@@ -2674,7 +2698,7 @@ BOOLEAN ExternRenderFace( UINT32 uiBuffer, INT32 iFaceIndex, INT16 sX, INT16 sY
|
||||
|
||||
GetFaceRelativeCoordinates( pFace, &usEyesX, &usEyesY, &usMouthX, &usMouthY );
|
||||
|
||||
HandleRenderFaceAdjustments( pFace, FALSE, TRUE, uiBuffer, sX, sY, ( UINT16)( sX + usEyesX ), ( UINT16)( sY + usEyesY ) );
|
||||
HandleRenderFaceAdjustments(pFace, FALSE, TRUE, uiBuffer, sX, sY, (UINT16)(sX + usEyesX), ( UINT16)(sY + usEyesY), uiFaceShade);
|
||||
|
||||
// Restore extern rect
|
||||
if ( uiBuffer == guiSAVEBUFFER )
|
||||
|
||||
Reference in New Issue
Block a user