diff --git a/Strategic/mapscreen.cpp b/Strategic/mapscreen.cpp index 3fd0fa4e..082b7825 100644 --- a/Strategic/mapscreen.cpp +++ b/Strategic/mapscreen.cpp @@ -5434,7 +5434,7 @@ UINT32 MapScreenHandle(void) // make him continue talking - ContinueDialogue( MercPtrs[ gpCurrentTalkingFace->ubSoldierID ], FALSE ); + ContinueDialogue( gpCurrentTalkingFace->ubSoldierID, FALSE ); // reset diabled flag //gpCurrentTalkingFace->fDisabled = FALSE; diff --git a/Tactical/Dialogue Control.cpp b/Tactical/Dialogue Control.cpp index 75e5244a..a4739b70 100644 --- a/Tactical/Dialogue Control.cpp +++ b/Tactical/Dialogue Control.cpp @@ -1992,7 +1992,7 @@ BOOLEAN SpecialCharacterDialogueEventWithExtraParam( UINT32 uiSpecialEventFlag, } extern INT8 gbSelectedArmsDealerID; -extern UINT16 gusIDOfCivTrader; +extern SoldierID gusIDOfCivTrader; BOOLEAN ExecuteCharacterDialogue( UINT8 ubCharacterNum, UINT16 usQuoteNum, INT32 iFaceIndex, UINT8 bUIHandlerID, BOOLEAN fFromSoldier ) { @@ -2107,7 +2107,7 @@ BOOLEAN ExecuteCharacterDialogue( UINT8 ubCharacterNum, UINT16 usQuoteNum, INT32 && iFaceIndex == -1 && gusIDOfCivTrader != NOBODY ) { - SOLDIERTYPE* pShopkeeper = MercPtrs[gusIDOfCivTrader]; + SOLDIERTYPE* pShopkeeper = gusIDOfCivTrader; if ( pShopkeeper ) { diff --git a/Tactical/Faces.cpp b/Tactical/Faces.cpp index dadad4d6..a61a627f 100644 --- a/Tactical/Faces.cpp +++ b/Tactical/Faces.cpp @@ -129,7 +129,7 @@ INT32 InitSoldierFace( SOLDIERTYPE *pSoldier ) } -INT32 InitFace( UINT8 usMercProfileID, UINT16 ubSoldierID, UINT32 uiInitFlags ) +INT32 InitFace( UINT8 usMercProfileID, SoldierID ubSoldierID, UINT32 uiInitFlags ) { UINT32 uiBlinkFrequency; UINT32 uiExpressionFrequency; @@ -182,7 +182,7 @@ void SetPalettes(HVOBJECT *hVObject, UINT32 uiIndex) (*hVObject)->pShades[FLASH_PORTRAIT_GRAYSHADE] = Create16BPPPaletteShaded(Pal, 255, 255, 255, FALSE); } -INT32 InternalInitFace( UINT8 usMercProfileID, UINT16 ubSoldierID, UINT32 uiInitFlags, INT32 iFaceFileID, UINT32 uiBlinkFrequency, UINT32 uiExpressionFrequency ) +INT32 InternalInitFace( UINT8 usMercProfileID, SoldierID ubSoldierID, UINT32 uiInitFlags, INT32 iFaceFileID, UINT32 uiBlinkFrequency, UINT32 uiExpressionFrequency ) { FACETYPE *pFace; VOBJECT_DESC VObjectDesc; @@ -554,15 +554,14 @@ void DeleteFace( INT32 iFaceIndex ) } -void SetAutoFaceActiveFromSoldier( UINT32 uiDisplayBuffer, UINT32 uiRestoreBuffer, UINT16 ubSoldierID, UINT16 usFaceX, UINT16 usFaceY ) +void SetAutoFaceActiveFromSoldier( UINT32 uiDisplayBuffer, UINT32 uiRestoreBuffer, SoldierID ubSoldierID, UINT16 usFaceX, UINT16 usFaceY ) { - if( ubSoldierID == NOBODY ) + if( ubSoldierID >= NOBODY ) { return; } - SetAutoFaceActive( uiDisplayBuffer, uiRestoreBuffer, MercPtrs[ ubSoldierID ]->iFaceIndex, usFaceX, usFaceY ); - + SetAutoFaceActive( uiDisplayBuffer, uiRestoreBuffer, ubSoldierID->iFaceIndex, usFaceX, usFaceY ); } void GetFaceRelativeCoordinates( FACETYPE *pFace, UINT16 *pusEyesX, UINT16 *pusEyesY, UINT16 *pusMouthX, UINT16 *pusMouthY ) @@ -753,17 +752,17 @@ void InternalSetAutoFaceActive( UINT32 uiDisplayBuffer, UINT32 uiRestoreBuffer, // Are we a soldier? if ( pFace->ubSoldierID != NOBODY ) { - pFace->bOldSoldierLife = MercPtrs[ pFace->ubSoldierID ]->stats.bLife; + pFace->bOldSoldierLife = pFace->ubSoldierID->stats.bLife; } } -void SetAutoFaceInActiveFromSoldier( UINT16 ubSoldierID ) +void SetAutoFaceInActiveFromSoldier( SoldierID ubSoldierID ) { // Check for valid soldier CHECKV( ubSoldierID != NOBODY ); - SetAutoFaceInActive( MercPtrs[ ubSoldierID ]->iFaceIndex ); + SetAutoFaceInActive( ubSoldierID->iFaceIndex ); } @@ -795,7 +794,7 @@ void SetAutoFaceInActive(INT32 iFaceIndex ) // if ( pFace->ubSoldierID != NOBODY ) { - pSoldier = MercPtrs[ pFace->ubSoldierID ]; + pSoldier = pFace->ubSoldierID; // IF we are in tactical if ( pSoldier->bAssignment == iCurrentTacticalSquad && guiCurrentScreen == GAME_SCREEN ) @@ -948,11 +947,11 @@ void BlinkAutoFace( INT32 iFaceIndex ) // CHECK IF BUDDY IS DEAD, UNCONSCIOUS, ASLEEP, OR POW! if ( pFace->ubSoldierID != NOBODY ) { - uiFaceShade = GetFaceShade(MercPtrs[pFace->ubSoldierID], pFace, FALSE); + uiFaceShade = GetFaceShade(pFace->ubSoldierID, pFace, FALSE); - if ( ( MercPtrs[ pFace->ubSoldierID ]->stats.bLife < OKLIFE ) || - ( MercPtrs[ pFace->ubSoldierID ]->flags.fMercAsleep == TRUE ) || - ( MercPtrs[ pFace->ubSoldierID ]->bAssignment == ASSIGNMENT_POW ) ) + if ( ( pFace->ubSoldierID->stats.bLife < OKLIFE ) || + ( pFace->ubSoldierID->flags.fMercAsleep == TRUE ) || + ( pFace->ubSoldierID->bAssignment == ASSIGNMENT_POW ) ) { return; } @@ -1088,13 +1087,13 @@ void HandleFaceHilights( FACETYPE *pFace, UINT32 uiBuffer, INT16 sFaceX, INT16 s { if ( pFace->ubSoldierID != NOBODY ) { - if ( MercPtrs[ pFace->ubSoldierID ]->stats.bLife >= OKLIFE ) + if ( pFace->ubSoldierID->stats.bLife >= OKLIFE ) { // Lock buffer pDestBuf = LockVideoSurface( uiBuffer, &uiDestPitchBYTES ); SetClippingRegionAndImageWidth( uiDestPitchBYTES, sFaceX-2, sFaceY-1, sFaceX + pFace->usFaceWidth + 4, sFaceY + pFace->usFaceHeight + 4 ); - if ( MercPtrs[ pFace->ubSoldierID ]->bStealthMode ) + if ( pFace->ubSoldierID->bStealthMode ) { usLineColor = Get16BPPColor( FROMRGB( 158, 158, 12 ) ); } @@ -1237,7 +1236,7 @@ void MouthAutoFace( INT32 iFaceIndex ) // Set shade if (pFace->ubSoldierID != NOBODY) { - uiFaceShade = GetFaceShade(MercPtrs[pFace->ubSoldierID], pFace, FALSE); + uiFaceShade = GetFaceShade(pFace->ubSoldierID, pFace, FALSE); } HandleRenderFaceAdjustments( pFace, TRUE, FALSE, 0, pFace->usFaceX, pFace->usFaceY, pFace->usEyesX, pFace->usEyesY, uiFaceShade); @@ -1363,12 +1362,12 @@ UINT32 GetFaceShade(SOLDIERTYPE *pSoldier, FACETYPE *pFace, BOOLEAN fExternBlit) return FLASH_PORTRAIT_NOSHADE; } -BOOLEAN RenderAutoFaceFromSoldier( UINT16 ubSoldierID ) +BOOLEAN RenderAutoFaceFromSoldier( SoldierID ubSoldierID ) { // Check for valid soldier CHECKF( ubSoldierID != NOBODY ); - return( RenderAutoFace( MercPtrs[ ubSoldierID ]->iFaceIndex ) ); + return( RenderAutoFace( ubSoldierID->iFaceIndex ) ); } //---------------------------------------LEGION------------------------------- @@ -1629,16 +1628,16 @@ void HandleRenderFaceAdjustments( FACETYPE *pFace, BOOLEAN fDisplayBuffer, BOOLE // BLIT HATCH if ( pFace->ubSoldierID != NOBODY ) { - pSoldier = MercPtrs[ pFace->ubSoldierID ]; + pSoldier = 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 (gGameSettings.fOptions[TOPTION_SHOW_TACTICAL_FACE_GEAR] && pSoldier->stats.bLife > 0 && !(pFace->uiFlags & FACE_BIGFACE)) { - if (MercPtrs[pFace->ubSoldierID]->inv[HELMETPOS].usItem > 0) + if (pSoldier->inv[HELMETPOS].usItem > 0) { - uiFaceItemOne = MercPtrs[pFace->ubSoldierID]->inv[HELMETPOS].usItem; + uiFaceItemOne = pSoldier->inv[HELMETPOS].usItem; if (uiFaceItemOne != NONE && zNewFaceGear[uiFaceItemOne].Type == 1) //back { @@ -1648,17 +1647,17 @@ void HandleRenderFaceAdjustments( FACETYPE *pFace, BOOLEAN fDisplayBuffer, BOOLE // 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) + if (pSoldier->inv[HEAD1POS].usItem + pSoldier->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; + uiFaceItemOne = pSoldier->inv[HEAD1POS].usItem; + uiFaceItemTwo = pSoldier->inv[HEAD2POS].usItem; - uiFaceOne = MercPtrs[pFace->ubSoldierID]->inv[HEAD1POS].usItem; - uiFaceTwo = MercPtrs[pFace->ubSoldierID]->inv[HEAD2POS].usItem; + uiFaceOne = pSoldier->inv[HEAD1POS].usItem; + uiFaceTwo = pSoldier->inv[HEAD2POS].usItem; // check first face slot if (uiFaceItemOne != NONE) @@ -1797,11 +1796,11 @@ void HandleRenderFaceAdjustments( FACETYPE *pFace, BOOLEAN fDisplayBuffer, BOOLE } } - if (MercPtrs[pFace->ubSoldierID]->inv[HELMETPOS].usItem > 0) + if (pSoldier->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 ) + // && ( pSoldier->ubProfile < 51 || pSoldier->ubProfile > 56 ) { - uiFaceItemOne = MercPtrs[pFace->ubSoldierID]->inv[HELMETPOS].usItem; + uiFaceItemOne = pSoldier->inv[HELMETPOS].usItem; if (uiFaceItemOne != NONE) { @@ -1815,7 +1814,7 @@ void HandleRenderFaceAdjustments( FACETYPE *pFace, BOOLEAN fDisplayBuffer, BOOLE //------------------------------------end of tactical face gear----------------------------- } - if ( (MercPtrs[pFace->ubSoldierID]->stats.bLife < CONSCIOUSNESS || MercPtrs[pFace->ubSoldierID]->flags.fDeadPanel ) ) + if ( (pSoldier->stats.bLife < CONSCIOUSNESS || pSoldier->flags.fDeadPanel ) ) { // Blit Closed eyes here! BltVideoObjectFromIndex( uiRenderBuffer, pFace->uiVideoObject, 1, usEyesX, usEyesY, VO_BLT_SRCTRANSPARENCY, NULL ); @@ -1824,14 +1823,14 @@ void HandleRenderFaceAdjustments( FACETYPE *pFace, BOOLEAN fDisplayBuffer, BOOLE BltVideoObjectFromIndex( uiRenderBuffer, guiHATCH, 0, sFaceX, sFaceY, VO_BLT_SRCTRANSPARENCY, NULL ); } - if( MercPtrs[ pFace->ubSoldierID ]->flags.fMercAsleep == TRUE ) + if( pSoldier->flags.fMercAsleep == TRUE ) { // blit eyes closed BltVideoObjectFromIndex( uiRenderBuffer, pFace->uiVideoObject, 1, usEyesX, usEyesY, VO_BLT_SRCTRANSPARENCY, NULL ); } // Flugente: frozen soldiers are, well, frozen - if ( MercPtrs[pFace->ubSoldierID]->usSkillCooldown[SOLDIER_COOLDOWN_CRYO] ) + if ( pSoldier->usSkillCooldown[SOLDIER_COOLDOWN_CRYO] ) { // Blit Closed eyes here! BltVideoObjectFromIndex( uiRenderBuffer, pFace->uiVideoObject, 2, usEyesX, usEyesY, VO_BLT_SRCTRANSPARENCY, NULL ); @@ -1905,7 +1904,7 @@ void HandleRenderFaceAdjustments( FACETYPE *pFace, BOOLEAN fDisplayBuffer, BOOLE } - if ( MercPtrs[ pFace->ubSoldierID ]->bInSector && ( ( ( gTacticalStatus.ubCurrentTeam != OUR_TEAM ) || !OK_INTERRUPT_MERC( MercPtrs[ pFace->ubSoldierID ] ) ) && !gfHiddenInterrupt ) || ( ( gfSMDisableForItems && !gfInItemPickupMenu ) && gusSMCurrentMerc == pFace->ubSoldierID && gsCurInterfacePanel == SM_PANEL ) ) + if ( pSoldier->bInSector && ( ( ( gTacticalStatus.ubCurrentTeam != OUR_TEAM ) || !OK_INTERRUPT_MERC( pSoldier ) ) && !gfHiddenInterrupt ) || ( ( gfSMDisableForItems && !gfInItemPickupMenu ) && gusSMCurrentMerc == pSoldier && gsCurInterfacePanel == SM_PANEL ) ) { // Blit hatch! BltVideoObjectFromIndex( uiRenderBuffer, guiHATCH, 0, sFaceX, sFaceY, VO_BLT_SRCTRANSPARENCY, NULL ); @@ -1913,12 +1912,12 @@ void HandleRenderFaceAdjustments( FACETYPE *pFace, BOOLEAN fDisplayBuffer, BOOLE } // sevenfm: only show for alive soldiers, no face icons for big faces - if (MercPtrs[pFace->ubSoldierID]->stats.bLife > 0 && !(pFace->uiFlags & FACE_BIGFACE)) + if (pSoldier->stats.bLife > 0 && !(pFace->uiFlags & FACE_BIGFACE)) { // Check if a robot and is not controlled.... - if (MercPtrs[pFace->ubSoldierID]->flags.uiStatusFlags & SOLDIER_ROBOT) + if (pSoldier->flags.uiStatusFlags & SOLDIER_ROBOT) { - if (!MercPtrs[pFace->ubSoldierID]->CanRobotBeControlled()) + if (!pSoldier->CanRobotBeControlled()) { // Not controlled robot sIconIndex = 5; @@ -1926,7 +1925,7 @@ void HandleRenderFaceAdjustments( FACETYPE *pFace, BOOLEAN fDisplayBuffer, BOOLE } } - if (MercPtrs[pFace->ubSoldierID]->ControllingRobot()) + if (pSoldier->ControllingRobot()) { // controlling robot sIconIndex = 4; @@ -1939,10 +1938,10 @@ void HandleRenderFaceAdjustments( FACETYPE *pFace, BOOLEAN fDisplayBuffer, BOOLE // 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 if (gGameSettings.fOptions[TOPTION_SHOW_TACTICAL_FACE_ICONS] && - (MercPtrs[pFace->ubSoldierID]->inv[HEAD1POS].usItem + MercPtrs[pFace->ubSoldierID]->inv[HEAD2POS].usItem) > 0) + (pSoldier->inv[HEAD1POS].usItem + pSoldier->inv[HEAD2POS].usItem) > 0) { - uiFaceItemOne = MercPtrs[pFace->ubSoldierID]->inv[HEAD1POS].usItem; - uiFaceItemTwo = MercPtrs[pFace->ubSoldierID]->inv[HEAD2POS].usItem; + uiFaceItemOne = pSoldier->inv[HEAD1POS].usItem; + uiFaceItemTwo = pSoldier->inv[HEAD2POS].usItem; //MM: fixing the hardcoded craziness here... // check first face slot @@ -2050,20 +2049,20 @@ void HandleRenderFaceAdjustments( FACETYPE *pFace, BOOLEAN fDisplayBuffer, BOOLE } // If blind... - if (MercPtrs[pFace->ubSoldierID]->bBlindedCounter > 0) + if (pSoldier->bBlindedCounter > 0) { DoRightIcon(uiRenderBuffer, pFace, sFaceX, sFaceY, bNumRightIcons, 6); bNumRightIcons++; } // Flugente: add drug symbol if drugged (without alcohol) - if (MercDrugged(MercPtrs[pFace->ubSoldierID])) + if (MercDrugged(pSoldier)) { DoRightIcon(uiRenderBuffer, pFace, sFaceX, sFaceY, bNumRightIcons, 7); bNumRightIcons++; } - if (GetDrunkLevel(MercPtrs[pFace->ubSoldierID]) != SOBER) + if (GetDrunkLevel(pSoldier) != SOBER) { DoRightIcon(uiRenderBuffer, pFace, sFaceX, sFaceY, bNumRightIcons, 8); bNumRightIcons++; @@ -2072,13 +2071,13 @@ void HandleRenderFaceAdjustments( FACETYPE *pFace, BOOLEAN fDisplayBuffer, BOOLE // Flugente: food system - symbols used if hungry or thirsty if (UsingFoodSystem()) { - if (MercPtrs[pFace->ubSoldierID]->bDrinkLevel < FoodMoraleMods[FOOD_MERC_START_SHOW_HUNGER_SYMBOL].bThreshold) + if (pSoldier->bDrinkLevel < FoodMoraleMods[FOOD_MERC_START_SHOW_HUNGER_SYMBOL].bThreshold) { DoRightIcon(uiRenderBuffer, pFace, sFaceX, sFaceY, bNumRightIcons, 9); bNumRightIcons++; } - if (MercPtrs[pFace->ubSoldierID]->bFoodLevel < FoodMoraleMods[FOOD_MERC_START_SHOW_HUNGER_SYMBOL].bThreshold) + if (pSoldier->bFoodLevel < FoodMoraleMods[FOOD_MERC_START_SHOW_HUNGER_SYMBOL].bThreshold) { DoRightIcon(uiRenderBuffer, pFace, sFaceX, sFaceY, bNumRightIcons, 10); bNumRightIcons++; @@ -2094,7 +2093,7 @@ void HandleRenderFaceAdjustments( FACETYPE *pFace, BOOLEAN fDisplayBuffer, BOOLE UINT16 ubID2 = 0; UINT16 ubGunSlot2 = 0; UINT16 ubFaceSlot2 = 0; - if (MercPtrs[pFace->ubSoldierID]->IsFeedingExternal(&ubID1, &ubGunSlot1, &ubFaceSlot1, &ubID2, &ubGunSlot2, &ubFaceSlot2)) + if (pSoldier->IsFeedingExternal(&ubID1, &ubGunSlot1, &ubFaceSlot1, &ubID2, &ubGunSlot2, &ubFaceSlot2)) { DoRightIcon(uiRenderBuffer, pFace, sFaceX, sFaceY, bNumRightIcons, 11); bNumRightIcons++; @@ -2102,33 +2101,33 @@ void HandleRenderFaceAdjustments( FACETYPE *pFace, BOOLEAN fDisplayBuffer, BOOLE } // Flugente: add an icon if we are currently in disguise - if (MercPtrs[pFace->ubSoldierID]->usSoldierFlagMask & (SOLDIER_COVERT_CIV | SOLDIER_COVERT_SOLDIER)) + if (pSoldier->usSoldierFlagMask & (SOLDIER_COVERT_CIV | SOLDIER_COVERT_SOLDIER)) { DoRightIcon(uiRenderBuffer, pFace, sFaceX, sFaceY, bNumRightIcons, 12); bNumRightIcons++; } // Flugente: add an icon if we are performing a multi-turn action - if (MercPtrs[pFace->ubSoldierID]->GetMultiTurnAction() == MTA_HACK) + if (pSoldier->GetMultiTurnAction() == MTA_HACK) { DoRightIcon(uiRenderBuffer, pFace, sFaceX, sFaceY, bNumRightIcons, 30); bNumRightIcons++; } - else if (MercPtrs[pFace->ubSoldierID]->GetMultiTurnAction() > MTA_NONE) + else if (pSoldier->GetMultiTurnAction() > MTA_NONE) { DoRightIcon(uiRenderBuffer, pFace, sFaceX, sFaceY, bNumRightIcons, 14); bNumRightIcons++; } // Flugente: icons for radio operator actions (not the assignment) - if (MercPtrs[pFace->ubSoldierID]->bAssignment != RADIO_SCAN) + if (pSoldier->bAssignment != RADIO_SCAN) { - if (MercPtrs[pFace->ubSoldierID]->usSoldierFlagMask & (SOLDIER_RADIO_OPERATOR_SCANNING | SOLDIER_RADIO_OPERATOR_LISTENING)) + if (pSoldier->usSoldierFlagMask & (SOLDIER_RADIO_OPERATOR_SCANNING | SOLDIER_RADIO_OPERATOR_LISTENING)) { DoRightIcon(uiRenderBuffer, pFace, sFaceX, sFaceY, bNumRightIcons, 19); bNumRightIcons++; } - else if (MercPtrs[pFace->ubSoldierID]->usSoldierFlagMask & SOLDIER_RADIO_OPERATOR_JAMMING) + else if (pSoldier->usSoldierFlagMask & SOLDIER_RADIO_OPERATOR_JAMMING) { DoRightIcon(uiRenderBuffer, pFace, sFaceX, sFaceY, bNumRightIcons, 20); bNumRightIcons++; @@ -2136,9 +2135,9 @@ void HandleRenderFaceAdjustments( FACETYPE *pFace, BOOLEAN fDisplayBuffer, BOOLE } // Flugente: spotter - if (MercPtrs[pFace->ubSoldierID]->usSkillCounter[SOLDIER_COUNTER_SPOTTER] > 0) + if (pSoldier->usSkillCounter[SOLDIER_COUNTER_SPOTTER] > 0) { - if (MercPtrs[pFace->ubSoldierID]->IsSpotting()) + if (pSoldier->IsSpotting()) { DoRightIcon(uiRenderBuffer, pFace, sFaceX, sFaceY, bNumRightIcons, 24); bNumRightIcons++; @@ -2151,21 +2150,21 @@ void HandleRenderFaceAdjustments( FACETYPE *pFace, BOOLEAN fDisplayBuffer, BOOLE } // Flugente: focus trait - if (MercPtrs[pFace->ubSoldierID]->usSoldierFlagMask2 & SOLDIER_TRAIT_FOCUS) + if (pSoldier->usSoldierFlagMask2 & SOLDIER_TRAIT_FOCUS) { DoRightIcon(uiRenderBuffer, pFace, sFaceX, sFaceY, bNumRightIcons, 17); bNumRightIcons++; } // Flugente: disease - if (MercPtrs[pFace->ubSoldierID]->HasDisease(TRUE, FALSE, TRUE)) + if (pSoldier->HasDisease(TRUE, FALSE, TRUE)) { DoRightIcon(uiRenderBuffer, pFace, sFaceX, sFaceY, bNumRightIcons, 28); bNumRightIcons++; } // Flugente: drag stuff - if (MercPtrs[pFace->ubSoldierID]->IsDragging()) + if (pSoldier->IsDragging()) { DoRightIcon(uiRenderBuffer, pFace, sFaceX, sFaceY, bNumRightIcons, 31); ++bNumRightIcons; @@ -2178,7 +2177,7 @@ void HandleRenderFaceAdjustments( FACETYPE *pFace, BOOLEAN fDisplayBuffer, BOOLE case DOCTOR_MILITIA: sIconIndex_Assignment = 1; fDoIcon_Assignment = TRUE; - sPtsAvailable = CalculateHealingPointsForDoctor(MercPtrs[pFace->ubSoldierID], &usMaximumPts, FALSE); + sPtsAvailable = CalculateHealingPointsForDoctor(pSoldier, &usMaximumPts, FALSE); fShowCustomText = TRUE; @@ -2201,8 +2200,8 @@ void HandleRenderFaceAdjustments( FACETYPE *pFace, BOOLEAN fDisplayBuffer, BOOLE sIconIndex_Assignment = 2; fDoIcon_Assignment = TRUE; // show current health / maximum health - sPtsAvailable = MercPtrs[pFace->ubSoldierID]->stats.bLife; - usMaximumPts = MercPtrs[pFace->ubSoldierID]->stats.bLifeMax; + sPtsAvailable = pSoldier->stats.bLife; + usMaximumPts = pSoldier->stats.bLifeMax; fShowNumber = TRUE; fShowMaximum = TRUE; break; @@ -2218,27 +2217,27 @@ void HandleRenderFaceAdjustments( FACETYPE *pFace, BOOLEAN fDisplayBuffer, BOOLE fShowNumber = TRUE; fShowMaximum = TRUE; - switch (MercPtrs[pFace->ubSoldierID]->bAssignment) + switch (pSoldier->bAssignment) { case(TRAIN_SELF) : - sPtsAvailable = GetSoldierTrainingPts(MercPtrs[pFace->ubSoldierID], MercPtrs[pFace->ubSoldierID]->bTrainStat, &usMaximumPts); + sPtsAvailable = GetSoldierTrainingPts(pSoldier, pSoldier->bTrainStat, &usMaximumPts); break; case(TRAIN_BY_OTHER) : - sPtsAvailable = GetSoldierStudentPts(MercPtrs[pFace->ubSoldierID], MercPtrs[pFace->ubSoldierID]->bTrainStat, &usMaximumPts); + sPtsAvailable = GetSoldierStudentPts(pSoldier, pSoldier->bTrainStat, &usMaximumPts); break; case(TRAIN_TOWN) : case DRILL_MILITIA: - sPtsAvailable = GetTownTrainPtsForCharacter(MercPtrs[pFace->ubSoldierID], &usMaximumPts); + sPtsAvailable = GetTownTrainPtsForCharacter(pSoldier, &usMaximumPts); // divide both amounts by 10 to make the displayed numbers a little more user-palatable (smaller) sPtsAvailable = (sPtsAvailable + 5) / 10; usMaximumPts = (usMaximumPts + 5) / 10; break; case(TRAIN_TEAMMATE) : - sPtsAvailable = GetBonusTrainingPtsDueToInstructor(MercPtrs[pFace->ubSoldierID], NULL, MercPtrs[pFace->ubSoldierID]->bTrainStat, &usMaximumPts); + sPtsAvailable = GetBonusTrainingPtsDueToInstructor(pSoldier, NULL, pSoldier->bTrainStat, &usMaximumPts); break; case TRAIN_WORKERS: fShowMaximum = FALSE; - sPtsAvailable = GetTrainWorkerPts(MercPtrs[pFace->ubSoldierID]); + sPtsAvailable = GetTrainWorkerPts(pSoldier); break; } break; @@ -2249,24 +2248,24 @@ void HandleRenderFaceAdjustments( FACETYPE *pFace, BOOLEAN fDisplayBuffer, BOOLE fDoIcon_Assignment = TRUE; // Show repair points if merc has a toolkit in his hand. Otherwise show cleaning points. if (ItemIsToolkit(pSoldier->inv[HANDPOS].usItem)) - sPtsAvailable = CalculateRepairPointsForRepairman(MercPtrs[pFace->ubSoldierID], &usMaximumPts, FALSE); + sPtsAvailable = CalculateRepairPointsForRepairman(pSoldier, &usMaximumPts, FALSE); else - sPtsAvailable = CalculateCleaningPointsForRepairman(MercPtrs[pFace->ubSoldierID], &usMaximumPts); + sPtsAvailable = CalculateCleaningPointsForRepairman(pSoldier, &usMaximumPts); fShowNumber = TRUE; fShowMaximum = TRUE; // check if we are repairing a vehicle - if (Menptr[pFace->ubSoldierID].bVehicleUnderRepairID != -1) + if (pSoldier->bVehicleUnderRepairID != -1) { // reduce to a multiple of VEHICLE_REPAIR_POINTS_DIVISOR. This way skill too low will show up as 0 repair pts. sPtsAvailable -= (sPtsAvailable % VEHICLE_REPAIR_POINTS_DIVISOR); usMaximumPts -= (usMaximumPts % VEHICLE_REPAIR_POINTS_DIVISOR); } - else if (Menptr[pFace->ubSoldierID].flags.fFixingSAMSite) + else if (pSoldier->flags.fFixingSAMSite) { sPtsAvailable = (sPtsAvailable / SAM_SITE_REPAIR_DIVISOR); - INT16 sector = CALCULATE_STRATEGIC_INDEX(Menptr[pFace->ubSoldierID].sSectorX, Menptr[pFace->ubSoldierID].sSectorY); + INT16 sector = CALCULATE_STRATEGIC_INDEX(pSoldier->sSectorX, pSoldier->sSectorY); usMaximumPts = 100 - StrategicMap[sector].bSAMCondition; } @@ -2336,7 +2335,7 @@ void HandleRenderFaceAdjustments( FACETYPE *pFace, BOOLEAN fDisplayBuffer, BOOLE case DISEASE_DOCTOR_SECTOR: sIconIndex_Assignment = 1; fDoIcon_Assignment = TRUE; - sPtsAvailable = CalculateHealingPointsForDoctor(MercPtrs[pFace->ubSoldierID], &usMaximumPts, FALSE); + sPtsAvailable = CalculateHealingPointsForDoctor(pSoldier, &usMaximumPts, FALSE); fShowNumber = TRUE; fShowMaximum = TRUE; @@ -2348,15 +2347,15 @@ void HandleRenderFaceAdjustments( FACETYPE *pFace, BOOLEAN fDisplayBuffer, BOOLE case FORTIFICATION: sIconIndex_Assignment = 14; fDoIcon_Assignment = TRUE; - sPtsAvailable = (INT16)(MercPtrs[pFace->ubSoldierID]->GetConstructionPoints()); + sPtsAvailable = (INT16)(pSoldier->GetConstructionPoints()); fShowNumber = TRUE; fShowMaximum = TRUE; { - if (MercPtrs[pFace->ubSoldierID]->bSectorZ) + if (pSoldier->bSectorZ) { UNDERGROUND_SECTORINFO *pSectorInfo; - pSectorInfo = FindUnderGroundSector(MercPtrs[pFace->ubSoldierID]->sSectorX, MercPtrs[pFace->ubSoldierID]->sSectorY, MercPtrs[pFace->ubSoldierID]->bSectorZ); + pSectorInfo = FindUnderGroundSector(pSoldier->sSectorX, pSoldier->sSectorY, pSoldier->bSectorZ); if (pSectorInfo) usMaximumPts = (INT16)(pSectorInfo->dFortification_MaxPossible); @@ -2364,7 +2363,7 @@ void HandleRenderFaceAdjustments( FACETYPE *pFace, BOOLEAN fDisplayBuffer, BOOLE else { SECTORINFO *pSectorInfo; - pSectorInfo = &SectorInfo[SECTOR(MercPtrs[pFace->ubSoldierID]->sSectorX, MercPtrs[pFace->ubSoldierID]->sSectorY)]; + pSectorInfo = &SectorInfo[SECTOR(pSoldier->sSectorX, pSoldier->sSectorY)]; if (pSectorInfo) usMaximumPts = (INT16)(pSectorInfo->dFortification_MaxPossible); @@ -2384,8 +2383,8 @@ void HandleRenderFaceAdjustments( FACETYPE *pFace, BOOLEAN fDisplayBuffer, BOOLE } else { - bPtsAvailable = MercPtrs[pFace->ubSoldierID]->GetIntelGain(); - usMaximumPts = (UINT16)(MercPtrs[pFace->ubSoldierID]->GetUncoverRisk()); + bPtsAvailable = pSoldier->GetIntelGain(); + usMaximumPts = (UINT16)(pSoldier->GetUncoverRisk()); swprintf(sString, L"%4.2f/%d%%%%", bPtsAvailable, usMaximumPts); @@ -2397,7 +2396,7 @@ void HandleRenderFaceAdjustments( FACETYPE *pFace, BOOLEAN fDisplayBuffer, BOOLE sIconIndex_Assignment = 35; fDoIcon_Assignment = TRUE; fShowCustomText = TRUE; - bPtsAvailable = MercPtrs[pFace->ubSoldierID]->GetBurialPoints(&usMaximumPts); + bPtsAvailable = pSoldier->GetBurialPoints(&usMaximumPts); swprintf(sString, L"%3.1f/%d", bPtsAvailable, usMaximumPts); break; @@ -2406,8 +2405,8 @@ void HandleRenderFaceAdjustments( FACETYPE *pFace, BOOLEAN fDisplayBuffer, BOOLE sIconIndex_Assignment = 36; fDoIcon_Assignment = TRUE; fShowCustomText = TRUE; - sPtsAvailable = (INT16)MercPtrs[pFace->ubSoldierID]->GetAdministrationPoints(); - bPtsAvailable = GetAdministrationPercentage(MercPtrs[pFace->ubSoldierID]->sSectorX, MercPtrs[pFace->ubSoldierID]->sSectorY); + sPtsAvailable = (INT16)pSoldier->GetAdministrationPoints(); + bPtsAvailable = GetAdministrationPercentage(pSoldier->sSectorX, pSoldier->sSectorY); swprintf(sString, L"%d/%3.1f", sPtsAvailable, bPtsAvailable); break; @@ -2416,7 +2415,7 @@ void HandleRenderFaceAdjustments( FACETYPE *pFace, BOOLEAN fDisplayBuffer, BOOLE sIconIndex_Assignment = 34; fDoIcon_Assignment = TRUE; fShowCustomText = TRUE; - sPtsAvailable = (INT16)MercPtrs[pFace->ubSoldierID]->GetExplorationPoints(); + sPtsAvailable = (INT16)pSoldier->GetExplorationPoints(); // we only show our points, not how far we are with the task, lest the player deduct how many items there are to find in the first place swprintf( sString, L"%d", sPtsAvailable ); @@ -2424,14 +2423,14 @@ void HandleRenderFaceAdjustments( FACETYPE *pFace, BOOLEAN fDisplayBuffer, BOOLE } // Check for being serviced... - if (MercPtrs[pFace->ubSoldierID]->ubServicePartner != NOBODY) + if (pSoldier->ubServicePartner != NOBODY) { // Doctor... sIconIndex_Assignment = 1; fDoIcon_Assignment = TRUE; } - if (MercPtrs[pFace->ubSoldierID]->ubServiceCount != 0) + if (pSoldier->ubServiceCount != 0) { // Patient sIconIndex_Assignment = 2; @@ -2622,7 +2621,7 @@ BOOLEAN RenderAutoFace( INT32 iFaceIndex ) // Set shade if ( pFace->ubSoldierID != NOBODY ) { - uiFaceShade = GetFaceShade(MercPtrs[pFace->ubSoldierID], pFace, FALSE); + uiFaceShade = GetFaceShade(pFace->ubSoldierID, pFace, FALSE); SetFaceShade(pFace, uiFaceShade); } @@ -2655,12 +2654,12 @@ BOOLEAN RenderAutoFace( INT32 iFaceIndex ) } -BOOLEAN ExternRenderFaceFromSoldier( UINT32 uiBuffer, UINT16 ubSoldierID, INT16 sX, INT16 sY ) +BOOLEAN ExternRenderFaceFromSoldier( UINT32 uiBuffer, SoldierID ubSoldierID, INT16 sX, INT16 sY ) { // Check for valid soldier CHECKF( ubSoldierID != NOBODY ); - return( ExternRenderFace( uiBuffer, MercPtrs[ ubSoldierID ]->iFaceIndex, sX, sY ) ); + return( ExternRenderFace( uiBuffer, ubSoldierID->iFaceIndex, sX, sY ) ); } @@ -2686,7 +2685,7 @@ BOOLEAN ExternRenderFace( UINT32 uiBuffer, INT32 iFaceIndex, INT16 sX, INT16 sY UINT32 uiFaceShade = FLASH_PORTRAIT_NOSHADE; if ( pFace->ubSoldierID != NOBODY ) { - uiFaceShade = GetFaceShade(MercPtrs[pFace->ubSoldierID], pFace, TRUE); + uiFaceShade = GetFaceShade(pFace->ubSoldierID, pFace, TRUE); SetFaceShade(pFace, uiFaceShade); } @@ -2848,7 +2847,7 @@ void HandleAutoFaces( ) if ( pFace->ubSoldierID != NOBODY ) { // Get Life now - pSoldier = MercPtrs[ pFace->ubSoldierID ]; + pSoldier = pFace->ubSoldierID; bLife = pSoldier->stats.bLife; bInSector = pSoldier->bInSector; bAPs = pSoldier->bActionPoints; diff --git a/Tactical/ShopKeeper Interface.cpp b/Tactical/ShopKeeper Interface.cpp index 5e7b5ca6..553a2ad7 100644 --- a/Tactical/ShopKeeper Interface.cpp +++ b/Tactical/ShopKeeper Interface.cpp @@ -295,7 +295,7 @@ INT32 giSKIMessageBox=-1; INT8 gbSelectedArmsDealerID = -1; //Contains the enum value for the currently selected arms dealer // Flugente: while we're trading, store the ID of non-NPC dealers -UINT16 gusIDOfCivTrader = NOBODY; +SoldierID gusIDOfCivTrader = NOBODY; //the quote that is in progress, in certain circumstances, we don't want queuing of related but different quotes INT32 giShopKeepDialogueEventinProgress = - 1; @@ -770,7 +770,7 @@ BOOLEAN EnterShopKeeperInterface() SOLDIERTYPE* pShopkeeper = NULL; if ( gusIDOfCivTrader != NOBODY ) - pShopkeeper = MercPtrs[gusIDOfCivTrader]; + pShopkeeper = gusIDOfCivTrader; else pShopkeeper = FindSoldierByProfileID( armsDealerInfo[gbSelectedArmsDealerID].ubShopKeeperID, FALSE ); @@ -1027,7 +1027,7 @@ BOOLEAN EnterShopKeeperInterface() { //add the item back to the current PC into the slot it came from //ADB screw slot, slot is (used to be, before it was deleted) only ever, so autoplace it - AutoPlaceObject(&Menptr[ gpSMCurrentMerc->ubID ], &gItemToAdd.ItemObject, FALSE); + AutoPlaceObject(gpSMCurrentMerc->ubID, &gItemToAdd.ItemObject, FALSE); } //Clear the contents of the structure @@ -1472,7 +1472,7 @@ BOOLEAN RenderShopKeeperInterface() // Flugente: if this is a non-NPC dealer, we instead show their body in their current animation else if ( gusIDOfCivTrader != NOBODY ) { - SOLDIERTYPE* pSoldier = MercPtrs[gusIDOfCivTrader]; + SOLDIERTYPE* pSoldier = gusIDOfCivTrader; if ( pSoldier ) { @@ -2457,7 +2457,7 @@ void EnterShopKeeperInterfaceScreen( UINT8 ubArmsDealer ) } // Flugente: set up shopkeeper with a non-NPC -void EnterShopKeeperInterfaceScreen_NonNPC( INT8 ubArmsDealerID, UINT16 aMercID ) +void EnterShopKeeperInterfaceScreen_NonNPC( INT8 ubArmsDealerID, SoldierID aMercID ) { gusIDOfCivTrader = aMercID; diff --git a/Tactical/ShopKeeper Interface.h b/Tactical/ShopKeeper Interface.h index 549a0bea..af7565a0 100644 --- a/Tactical/ShopKeeper Interface.h +++ b/Tactical/ShopKeeper Interface.h @@ -97,7 +97,7 @@ bool RepairmanItemQsortCompare(INVENTORY_IN_SLOT& pInvSlot1, INVENTORY_IN_SLOT& void EnterShopKeeperInterfaceScreen( UINT8 ubArmsDealer ); // Flugente: set up shopkeeper with a non-NPC -void EnterShopKeeperInterfaceScreen_NonNPC( INT8 ubArmsDealerID, UINT16 aMercID ); +void EnterShopKeeperInterfaceScreen_NonNPC( INT8 ubArmsDealerID, SoldierID aMercID ); void EnableDisableShopkeeperButtons(UINT32 uiCurrentItemDescriptionScreen, int bpAction); diff --git a/Tactical/faces.h b/Tactical/faces.h index adfa524d..bb88eb38 100644 --- a/Tactical/faces.h +++ b/Tactical/faces.h @@ -104,7 +104,7 @@ typedef struct typedef struct { UINT32 uiFlags; // Basic flags - INT32 iID; + INT32 iID; BOOLEAN fAllocated; //Allocated or not BOOLEAN fTalking; //Set to true if face is talking ( can be sitting for user input to esc ) BOOLEAN fAnimatingTalking; // Set if the face is animating right now @@ -119,12 +119,12 @@ typedef struct BOOLEAN fFinishTalking; // A flag to indicate we want to delay after speech done - INT32 iVideoOverlay; // Value for video overlay ( not used too much ) + INT32 iVideoOverlay; // Value for video overlay ( not used too much ) UINT32 uiSoundID; // Sound ID if one being played - UINT16 ubSoldierID; // SoldierID if one specified - UINT8 ubCharacterNum; // Profile ID num + SoldierID ubSoldierID; // SoldierID if one specified + UINT8 ubCharacterNum; // Profile ID num UINT16 usFaceX; // X location to render face UINT16 usFaceY; // Y location to render face @@ -137,7 +137,7 @@ typedef struct BOOLEAN fDisplayTextOver; // Boolean indicating to display text on face BOOLEAN fOldDisplayTextOver; // OLD Boolean indicating to display text on face BOOLEAN fCanHandleInactiveNow; - wchar_t zDisplayText[ 30 ]; // String of text that can be displayed + wchar_t zDisplayText[ 30 ]; // String of text that can be displayed UINT16 usEyesX; UINT16 usEyesY; @@ -162,10 +162,10 @@ typedef struct UINT32 uiExpressionFrequency; UINT32 uiStopOverlayTimer; - UINT8 ubExpression; + UINT8 ubExpression; INT8 bOldSoldierLife; - INT16 bOldActionPoints; + INT16 bOldActionPoints; BOOLEAN fOldHandleUIHatch; BOOLEAN fOldShowHighlight; INT8 bOldAssignment; @@ -200,14 +200,14 @@ extern FACETYPE gFacesData[ NUM_FACE_SLOTS ]; // FACE HANDLING // // Faces are done like this: Call -INT32 InitFace( UINT8 usMercProfileID, UINT16 ubSoldierID, UINT32 uiInitFlags ); +INT32 InitFace( UINT8 usMercProfileID, SoldierID ubSoldierID, UINT32 uiInitFlags ); // The first parameter is the profile ID and the second is the soldier ID ( which for most cases // will be NOBODY if the face is not created from a SOLDIERTYPE ) // This function allocates a slot in the table for the face, loads it's STI file, sets some // values for X,Y locations of eyes from the profile. Does not mkae the face visible or anything like that // INternal init face, called if you don;t want to give a profile ID ( send NO_PROFILE ) for ID -INT32 InternalInitFace( UINT8 usMercProfileID, UINT16 ubSoldierID, UINT32 uiInitFlags, INT32 iFaceFileID, UINT32 uiBlinkFrequency, UINT32 uiExpressionFrequency ); +INT32 InternalInitFace( UINT8 usMercProfileID, SoldierID ubSoldierID, UINT32 uiInitFlags, INT32 iFaceFileID, UINT32 uiBlinkFrequency, UINT32 uiExpressionFrequency ); // Removes the face from the internal table, deletes any memory allocated if any. @@ -279,10 +279,10 @@ void HandleTalkingAutoFaces( ); // Same Functions but taking soldier ID first to get profile ID INT32 InitSoldierFace( SOLDIERTYPE *pSoldier ); void DeleteSoldierFace( SOLDIERTYPE *pSoldier ); -void SetAutoFaceActiveFromSoldier( UINT32 uiDisplayBuffer, UINT32 uiRestoreBuffer, UINT16 ubSoldierID, UINT16 usFaceX, UINT16 usFaceY ); -void SetAutoFaceInActiveFromSoldier( UINT16 ubSoldierID ); -BOOLEAN RenderAutoFaceFromSoldier( UINT16 ubSoldierID ); -BOOLEAN ExternRenderFaceFromSoldier( UINT32 uiBuffer, UINT16 ubSoldierID, INT16 sX, INT16 sY ); +void SetAutoFaceActiveFromSoldier( UINT32 uiDisplayBuffer, UINT32 uiRestoreBuffer, SoldierID ubSoldierID, UINT16 usFaceX, UINT16 usFaceY ); +void SetAutoFaceInActiveFromSoldier( SoldierID ubSoldierID ); +BOOLEAN RenderAutoFaceFromSoldier( SoldierID ubSoldierID ); +BOOLEAN ExternRenderFaceFromSoldier( UINT32 uiBuffer, SoldierID ubSoldierID, INT16 sX, INT16 sY );