mirror of
https://github.com/1dot13/source.git
synced 2026-07-22 13:40:22 +02:00
Use SoldierID
This commit is contained in:
@@ -284,9 +284,10 @@ SOLDIERTYPE* GetUsedSoldierToIndividualMilitia( UINT32 aMilitiaId )
|
||||
{
|
||||
for ( UINT32 cnt = gTacticalStatus.Team[MILITIA_TEAM].bFirstID; cnt <= gTacticalStatus.Team[MILITIA_TEAM].bLastID; ++cnt )
|
||||
{
|
||||
if ( MercPtrs[cnt] && MercPtrs[cnt]->bActive && MercPtrs[cnt]->usIndividualMilitiaID == aMilitiaId )
|
||||
SOLDIERTYPE *pSoldier = MercPtrs[cnt];
|
||||
if ( pSoldier && pSoldier->bActive && pSoldier->usIndividualMilitiaID == aMilitiaId )
|
||||
{
|
||||
return MercPtrs[cnt];
|
||||
return pSoldier;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -1716,16 +1716,17 @@ void GiveQuestRewardPoint( INT16 sQuestSectorX, INT16 sQuestsSectorY, INT8 bExpR
|
||||
|
||||
for ( UINT16 i = gTacticalStatus.Team[ gbPlayerNum ].bFirstID; i <= gTacticalStatus.Team[ gbPlayerNum ].bLastID; i++ )
|
||||
{
|
||||
if( MercPtrs[ i ]->bActive && MercPtrs[ i ]->stats.bLife >= CONSCIOUSNESS && !(MercPtrs[ i ]->flags.uiStatusFlags & SOLDIER_VEHICLE) && MercPtrs[ i ]->ubProfile != NO_PROFILE &&
|
||||
MercPtrs[ i ]->sSectorX == sQuestSectorX && MercPtrs[ i ]->sSectorY == sQuestsSectorY && !MercPtrs[ i ]->flags.fBetweenSectors && MercPtrs[ i ]->bTeam == gbPlayerNum &&
|
||||
MercPtrs[ i ]->bAssignment != IN_TRANSIT && MercPtrs[ i ]->bAssignment != ASSIGNMENT_DEAD && gMercProfiles[ MercPtrs[ i ]->ubProfile ].ubBodyType != 21 ) // != ROBOTNOWEAPON )
|
||||
SOLDIERTYPE *pSoldier = MercPtrs[i];
|
||||
if( pSoldier->bActive && pSoldier->stats.bLife >= CONSCIOUSNESS && !(pSoldier->flags.uiStatusFlags & SOLDIER_VEHICLE) && pSoldier->ubProfile != NO_PROFILE &&
|
||||
pSoldier->sSectorX == sQuestSectorX && pSoldier->sSectorY == sQuestsSectorY && !pSoldier->flags.fBetweenSectors && pSoldier->bTeam == gbPlayerNum &&
|
||||
pSoldier->bAssignment != IN_TRANSIT && pSoldier->bAssignment != ASSIGNMENT_DEAD && gMercProfiles[ pSoldier->ubProfile ].ubBodyType != 21 ) // != ROBOTNOWEAPON )
|
||||
{
|
||||
if ( MercPtrs[ i ]->ubProfile != bException )
|
||||
if ( pSoldier->ubProfile != bException )
|
||||
{
|
||||
gMercProfiles[ MercPtrs[ i ]->ubProfile ].records.ubQuestsHandled++;
|
||||
gMercProfiles[ pSoldier->ubProfile ].records.ubQuestsHandled++;
|
||||
|
||||
if ( bExpReward > 0 && gGameExternalOptions.usAwardSpecialExpForQuests > 0 )
|
||||
StatChange( MercPtrs[ i ], EXPERAMT, (bExpReward * gGameExternalOptions.usAwardSpecialExpForQuests), FALSE );
|
||||
StatChange( pSoldier, EXPERAMT, (bExpReward * gGameExternalOptions.usAwardSpecialExpForQuests), FALSE );
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -5458,13 +5458,14 @@ BOOLEAN TestForBloodcatAmbush( GROUP *pGroup )
|
||||
{
|
||||
for( UINT16 i = gTacticalStatus.Team[ OUR_TEAM ].bFirstID; i <= gTacticalStatus.Team[ OUR_TEAM ].bLastID; i++ )
|
||||
{
|
||||
if( MercPtrs[ i ]->bActive && MercPtrs[ i ]->stats.bLife && !(MercPtrs[ i ]->flags.uiStatusFlags & SOLDIER_VEHICLE) )
|
||||
SOLDIERTYPE *pSoldier = MercPtrs[i];
|
||||
if( pSoldier->bActive && pSoldier->stats.bLife && !(pSoldier->flags.uiStatusFlags & SOLDIER_VEHICLE) )
|
||||
{
|
||||
if ( MercPtrs[ i ]->sSectorX == pGroup->ubSectorX && MercPtrs[ i ]->sSectorY == pGroup->ubSectorY && MercPtrs[ i ]->bAssignment != ASSIGNMENT_POW && MercPtrs[ i ]->bAssignment != ASSIGNMENT_MINIEVENT && MercPtrs[i]->bAssignment != ASSIGNMENT_REBELCOMMAND && MercPtrs[ i ]->stats.bLife >= OKLIFE )
|
||||
if ( pSoldier->sSectorX == pGroup->ubSectorX && pSoldier->sSectorY == pGroup->ubSectorY && pSoldier->bAssignment != ASSIGNMENT_POW && pSoldier->bAssignment != ASSIGNMENT_MINIEVENT && pSoldier->bAssignment != ASSIGNMENT_REBELCOMMAND && pSoldier->stats.bLife >= OKLIFE )
|
||||
{
|
||||
if( HAS_SKILL_TRAIT( MercPtrs[ i ], SCOUTING_NT ) && MercPtrs[ i ]->ubProfile != NO_PROFILE )
|
||||
if( HAS_SKILL_TRAIT( pSoldier, SCOUTING_NT ) && pSoldier->ubProfile != NO_PROFILE )
|
||||
{
|
||||
gMercProfiles[ MercPtrs[ i ]->ubProfile ].records.usAmbushesExperienced++;
|
||||
gMercProfiles[ pSoldier->ubProfile ].records.usAmbushesExperienced++;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -5943,13 +5944,14 @@ BOOLEAN ScoutIsPresentInSquad( INT16 ubSectorNumX, INT16 ubSectorNumY )
|
||||
// sevenfm: scout should not be sleeping, in vehicle or on assignment
|
||||
for( i = gTacticalStatus.Team[ OUR_TEAM ].bFirstID; i <= gTacticalStatus.Team[ OUR_TEAM ].bLastID; i++ )
|
||||
{
|
||||
if( MercPtrs[ i ]->bActive &&
|
||||
MercPtrs[ i ]->stats.bLife >= OKLIFE &&
|
||||
MercPtrs[ i ]->sSectorX == ubSectorNumX &&
|
||||
MercPtrs[ i ]->sSectorY == ubSectorNumY &&
|
||||
MercPtrs[ i ]->bAssignment < ON_DUTY &&
|
||||
!MercPtrs[ i ]->flags.fMercAsleep &&
|
||||
HAS_SKILL_TRAIT( MercPtrs[ i ], SCOUTING_NT ) )
|
||||
SOLDIERTYPE *pSoldier = MercPtrs[i];
|
||||
if( pSoldier->bActive &&
|
||||
pSoldier->stats.bLife >= OKLIFE &&
|
||||
pSoldier->sSectorX == ubSectorNumX &&
|
||||
pSoldier->sSectorY == ubSectorNumY &&
|
||||
pSoldier->bAssignment < ON_DUTY &&
|
||||
!pSoldier->flags.fMercAsleep &&
|
||||
HAS_SKILL_TRAIT( pSoldier, SCOUTING_NT ) )
|
||||
{
|
||||
fScoutPresent = TRUE;
|
||||
}
|
||||
@@ -5982,11 +5984,12 @@ BOOLEAN ConcealedMercInSector( INT16 ubSectorNumX, INT16 ubSectorNumY, BOOLEAN a
|
||||
|
||||
for ( int i = gTacticalStatus.Team[OUR_TEAM].bFirstID; i <= gTacticalStatus.Team[OUR_TEAM].bLastID; ++i )
|
||||
{
|
||||
if ( MercPtrs[i]->bActive && MercPtrs[i]->stats.bLife >= OKLIFE && SPY_LOCATION( MercPtrs[i]->bAssignment ) )
|
||||
SOLDIERTYPE *pSoldier = MercPtrs[i];
|
||||
if ( pSoldier->bActive && pSoldier->stats.bLife >= OKLIFE && SPY_LOCATION( pSoldier->bAssignment ) )
|
||||
{
|
||||
if ( MercPtrs[i]->sSectorX == ubSectorNumX && MercPtrs[i]->sSectorY == ubSectorNumY && MercPtrs[i]->bSectorZ == 10 )
|
||||
if ( pSoldier->sSectorX == ubSectorNumX && pSoldier->sSectorY == ubSectorNumY && pSoldier->bSectorZ == 10 )
|
||||
{
|
||||
if ( !aScoutsOnly || HAS_SKILL_TRAIT( MercPtrs[i], SCOUTING_NT ) )
|
||||
if ( !aScoutsOnly || HAS_SKILL_TRAIT( pSoldier, SCOUTING_NT ) )
|
||||
{
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
@@ -224,27 +224,29 @@ void FillMapColoursForTransportGroups(INT32(&colorMap)[MAXIMUM_VALID_Y_COORDINAT
|
||||
std::map<UINT8, MonitoredSectorState> monitoredTowns;
|
||||
for( INT16 i = gTacticalStatus.Team[ OUR_TEAM ].bFirstID; i <= gTacticalStatus.Team[ OUR_TEAM ].bLastID; i++ )
|
||||
{
|
||||
if( MercPtrs[ i ]->bActive &&
|
||||
MercPtrs[ i ]->stats.bLife >= OKLIFE &&
|
||||
(MercPtrs[ i ]->bAssignment < ON_DUTY || MercPtrs[ i ]->bAssignment == GATHERINTEL) &&
|
||||
!MercPtrs[ i ]->flags.fMercAsleep)
|
||||
SOLDIERTYPE *pSoldier = MercPtrs[i];
|
||||
|
||||
if( pSoldier->bActive &&
|
||||
pSoldier->stats.bLife >= OKLIFE &&
|
||||
(pSoldier->bAssignment < ON_DUTY || pSoldier->bAssignment == GATHERINTEL) &&
|
||||
!pSoldier->flags.fMercAsleep)
|
||||
{
|
||||
if (gGameOptions.fNewTraitSystem)
|
||||
{
|
||||
if (HAS_SKILL_TRAIT(MercPtrs[i], SCOUTING_NT))
|
||||
if (HAS_SKILL_TRAIT(pSoldier, SCOUTING_NT))
|
||||
{
|
||||
detectionMap[std::pair<INT16,INT16>(MercPtrs[i]->sSectorX, MercPtrs[i]->sSectorY)] = DETECTION_RANGE_SCOUT;
|
||||
detectionMap[std::pair<INT16,INT16>(pSoldier->sSectorX, pSoldier->sSectorY)] = DETECTION_RANGE_SCOUT;
|
||||
}
|
||||
else if (HAS_SKILL_TRAIT(MercPtrs[i], RADIO_OPERATOR_NT) && MercPtrs[i]->CanUseRadio(FALSE))
|
||||
else if (HAS_SKILL_TRAIT(pSoldier, RADIO_OPERATOR_NT) && pSoldier->CanUseRadio(FALSE))
|
||||
{
|
||||
detectionMap[std::pair<INT16,INT16>(MercPtrs[i]->sSectorX, MercPtrs[i]->sSectorY)] = DETECTION_RANGE_RADIO;
|
||||
detectionMap[std::pair<INT16,INT16>(pSoldier->sSectorX, pSoldier->sSectorY)] = DETECTION_RANGE_RADIO;
|
||||
}
|
||||
else if (HAS_SKILL_TRAIT(MercPtrs[i], COVERT_NT))
|
||||
else if (HAS_SKILL_TRAIT(pSoldier, COVERT_NT))
|
||||
{
|
||||
if (MercPtrs[i]->bAssignment == GATHERINTEL)
|
||||
if (pSoldier->bAssignment == GATHERINTEL)
|
||||
{
|
||||
detectionMap[std::pair<INT16,INT16>(MercPtrs[i]->sSectorX, MercPtrs[i]->sSectorY)] = DETECTION_RANGE_COVERT;
|
||||
monitoredTowns[GetTownIdForSector(MercPtrs[i]->sSectorX, MercPtrs[i]->sSectorY)] = MonitoredSectorState::Monitored;
|
||||
detectionMap[std::pair<INT16,INT16>(pSoldier->sSectorX, pSoldier->sSectorY)] = DETECTION_RANGE_COVERT;
|
||||
monitoredTowns[GetTownIdForSector(pSoldier->sSectorX, pSoldier->sSectorY)] = MonitoredSectorState::Monitored;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -481,11 +483,12 @@ void UpdateTransportGroupInventory()
|
||||
std::set<UINT8> playerCalibres;
|
||||
for (INT16 i = gTacticalStatus.Team[OUR_TEAM].bFirstID; i <= gTacticalStatus.Team[OUR_TEAM].bLastID; i++)
|
||||
{
|
||||
if (MercPtrs[i]->bActive && !(MercPtrs[i]->flags.uiStatusFlags & SOLDIER_VEHICLE))
|
||||
SOLDIERTYPE *pSoldier = MercPtrs[i];
|
||||
if (pSoldier->bActive && !(pSoldier->flags.uiStatusFlags & SOLDIER_VEHICLE))
|
||||
{
|
||||
for (int j = 0 ; j < MercPtrs[i]->inv.size(); ++j)
|
||||
for (int j = 0 ; j < pSoldier->inv.size(); ++j)
|
||||
{
|
||||
OBJECTTYPE& obj = MercPtrs[i]->inv[j];
|
||||
OBJECTTYPE& obj = pSoldier->inv[j];
|
||||
if (obj.exists()
|
||||
&& Item[obj.usItem].usItemClass == IC_GUN)
|
||||
{
|
||||
|
||||
+41
-32
@@ -184,8 +184,8 @@ BOOLEAN fUsingEdgePointsForStrategicEntry = FALSE;
|
||||
BOOLEAN gfInvalidTraversal = FALSE;
|
||||
BOOLEAN gfLoneEPCAttemptingTraversal = FALSE;
|
||||
BOOLEAN gfRobotWithoutControllerAttemptingTraversal = FALSE;
|
||||
BOOLEAN gubLoneMercAttemptingToAbandonEPCs = 0;
|
||||
INT8 gbPotentiallyAbandonedEPCSlotID = -1;
|
||||
BOOLEAN gubLoneMercAttemptingToAbandonEPCs = 0;
|
||||
SoldierID gbPotentiallyAbandonedEPCSlotID = NOBODY;
|
||||
|
||||
INT8 gbGreenToElitePromotions = 0;
|
||||
INT8 gbGreenToRegPromotions = 0;
|
||||
@@ -2140,10 +2140,12 @@ BOOLEAN SetCurrentWorldSector( INT16 sMapX, INT16 sMapY, INT8 bMapZ )
|
||||
// GridNo = NOWHERE, which causes this assertion to fail
|
||||
//CHRISL: There's also an issue with vehicles. Soldiers in any vehicle are considered to be in sGridNo = NOWHERE
|
||||
// This will result in an assertion error, so let's skip the assertion if the merc is assigned to a vehicle
|
||||
if (!(MercPtrs[i]->flags.uiStatusFlags & SOLDIER_DEAD) && MercPtrs[i]->bAssignment != VEHICLE && !SPY_LOCATION(MercPtrs[i]->bAssignment) && MercPtrs[i]->bAssignment != ASSIGNMENT_POW)
|
||||
SOLDIERTYPE *pSoldier = MercPtrs[i];
|
||||
|
||||
if (!(pSoldier->flags.uiStatusFlags & SOLDIER_DEAD) && pSoldier->bAssignment != VEHICLE && !SPY_LOCATION(pSoldier->bAssignment) && pSoldier->bAssignment != ASSIGNMENT_POW)
|
||||
{
|
||||
//Assert( !MercPtrs[i]->bActive || !MercPtrs[i]->bInSector || MercPtrs[i]->sGridNo != NOWHERE || MercPtrs[i]->bVehicleID == iHelicopterVehicleId );
|
||||
Assert( !MercPtrs[i]->bActive || !MercPtrs[i]->bInSector || !TileIsOutOfBounds( MercPtrs[i]->sGridNo ) || MercPtrs[i]->bVehicleID == iHelicopterVehicleId );
|
||||
//Assert( !pSoldier->bActive || !pSoldier->bInSector || pSoldier->sGridNo != NOWHERE || pSoldier->bVehicleID == iHelicopterVehicleId );
|
||||
Assert( !pSoldier->bActive || !pSoldier->bInSector || !TileIsOutOfBounds( pSoldier->sGridNo ) || pSoldier->bVehicleID == iHelicopterVehicleId );
|
||||
}
|
||||
}
|
||||
|
||||
@@ -2190,10 +2192,11 @@ BOOLEAN SetCurrentWorldSector( INT16 sMapX, INT16 sMapY, INT8 bMapZ )
|
||||
// GridNo = NOWHERE, which causes this assertion to fail
|
||||
//CHRISL: There's also an issue with vehicles. Soldiers in any vehicle are considered to be in sGridNo = NOWHERE
|
||||
// This will result in an assertion error, so let's skip the assertion if the merc is assigned to a vehicle
|
||||
if (!(MercPtrs[i]->flags.uiStatusFlags & SOLDIER_DEAD) && MercPtrs[i]->bAssignment != VEHICLE && MercPtrs[i]->bAssignment != ASSIGNMENT_POW)
|
||||
SOLDIERTYPE *pSoldier = MercPtrs[i];
|
||||
if (!(pSoldier->flags.uiStatusFlags & SOLDIER_DEAD) && pSoldier->bAssignment != VEHICLE && pSoldier->bAssignment != ASSIGNMENT_POW)
|
||||
{
|
||||
//Assert( !MercPtrs[i]->bActive || !MercPtrs[i]->bInSector || MercPtrs[i]->sGridNo != NOWHERE || MercPtrs[i]->bVehicleID == iHelicopterVehicleId );
|
||||
Assert( !MercPtrs[i]->bActive || !MercPtrs[i]->bInSector || !TileIsOutOfBounds( MercPtrs[i]->sGridNo ) || MercPtrs[i]->bVehicleID == iHelicopterVehicleId );
|
||||
//Assert( !pSoldier->bActive || !pSoldier->bInSector || pSoldier->sGridNo != NOWHERE || pSoldier->bVehicleID == iHelicopterVehicleId );
|
||||
Assert( !pSoldier->bActive || !pSoldier->bInSector || !TileIsOutOfBounds( pSoldier->sGridNo ) || pSoldier->bVehicleID == iHelicopterVehicleId );
|
||||
}
|
||||
}
|
||||
|
||||
@@ -2967,9 +2970,10 @@ BOOLEAN EnterSector( INT16 sSectorX, INT16 sSectorY, INT8 bSectorZ )
|
||||
{
|
||||
for ( i = gTacticalStatus.Team[CIV_TEAM].bFirstID; i <= gTacticalStatus.Team[CIV_TEAM].bLastID; i++ )
|
||||
{
|
||||
if ( MercPtrs[i]->bActive && MercPtrs[i]->bInSector )
|
||||
SOLDIERTYPE *pSoldier = MercPtrs[i];
|
||||
if ( pSoldier->bActive && pSoldier->bInSector )
|
||||
{
|
||||
SetupProfileInsertionDataForSoldier( MercPtrs[i] );
|
||||
SetupProfileInsertionDataForSoldier( pSoldier );
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -4869,7 +4873,7 @@ BOOLEAN OKForSectorExit( INT8 bExitDirection, INT32 usAdditionalData, UINT32 *pu
|
||||
gfInvalidTraversal = FALSE;
|
||||
gfLoneEPCAttemptingTraversal = FALSE;
|
||||
gubLoneMercAttemptingToAbandonEPCs = 0;
|
||||
gbPotentiallyAbandonedEPCSlotID = -1;
|
||||
gbPotentiallyAbandonedEPCSlotID = NOBODY;
|
||||
|
||||
// Look through all mercs and check if they are within range of east end....
|
||||
cnt = gTacticalStatus.Team[gbPlayerNum].bFirstID;
|
||||
@@ -4894,7 +4898,7 @@ BOOLEAN OKForSectorExit( INT8 bExitDirection, INT32 usAdditionalData, UINT32 *pu
|
||||
{
|
||||
ubNumEPCs++;
|
||||
//Also record the EPC's slot ID incase we later build a string using the EPC's name.
|
||||
gbPotentiallyAbandonedEPCSlotID = (INT8)cnt;
|
||||
gbPotentiallyAbandonedEPCSlotID = cnt;
|
||||
if ( AM_A_ROBOT( pSoldier ) && !pSoldier->CanRobotBeControlled( ) )
|
||||
{
|
||||
gfRobotWithoutControllerAttemptingTraversal = TRUE;
|
||||
@@ -6491,9 +6495,10 @@ BOOLEAN HandleDefiniteUnloadingOfWorld( UINT8 ubUnloadCode )
|
||||
//@@@Evaluate
|
||||
for ( i = gTacticalStatus.Team[CIV_TEAM].bFirstID; i <= gTacticalStatus.Team[CIV_TEAM].bLastID; i++ )
|
||||
{
|
||||
if ( MercPtrs[i]->bActive && MercPtrs[i]->bInSector )
|
||||
SOLDIERTYPE *pSoldier = MercPtrs[i];
|
||||
if ( pSoldier->bActive && pSoldier->bInSector )
|
||||
{
|
||||
SetupProfileInsertionDataForSoldier( MercPtrs[i] );
|
||||
SetupProfileInsertionDataForSoldier( pSoldier );
|
||||
}
|
||||
}
|
||||
|
||||
@@ -6511,19 +6516,21 @@ BOOLEAN HandlePotentialBringUpAutoresolveToFinishBattle( int pSectorX, int pSect
|
||||
//co-exist in the sector, then make them fight for control of the sector via autoresolve.
|
||||
for ( int i = gTacticalStatus.Team[ENEMY_TEAM].bFirstID; i <= gTacticalStatus.Team[CREATURE_TEAM].bLastID; i++ )
|
||||
{
|
||||
if ( MercPtrs[i]->bActive && MercPtrs[i]->stats.bLife )
|
||||
SOLDIERTYPE *pEnemy = MercPtrs[i];
|
||||
if ( pEnemy->bActive && pEnemy->stats.bLife )
|
||||
{
|
||||
if ( MercPtrs[i]->sSectorX == pSectorX &&
|
||||
MercPtrs[i]->sSectorY == pSectorY &&
|
||||
MercPtrs[i]->bSectorZ == pSectorZ )
|
||||
if ( pEnemy->sSectorX == pSectorX &&
|
||||
pEnemy->sSectorY == pSectorY &&
|
||||
pEnemy->bSectorZ == pSectorZ )
|
||||
{ //We have enemies, now look for militia!
|
||||
for ( i = gTacticalStatus.Team[MILITIA_TEAM].bFirstID; i <= gTacticalStatus.Team[MILITIA_TEAM].bLastID; i++ )
|
||||
{
|
||||
if ( MercPtrs[i]->bActive && MercPtrs[i]->stats.bLife && MercPtrs[i]->bSide == OUR_TEAM )
|
||||
SOLDIERTYPE *pMilitia = MercPtrs[i];
|
||||
if ( pMilitia->bActive && pMilitia->stats.bLife && pMilitia->bSide == OUR_TEAM )
|
||||
{
|
||||
if ( MercPtrs[i]->sSectorX == pSectorX &&
|
||||
MercPtrs[i]->sSectorY == pSectorY &&
|
||||
MercPtrs[i]->bSectorZ == pSectorZ )
|
||||
if ( pMilitia->sSectorX == pSectorX &&
|
||||
pMilitia->sSectorY == pSectorY &&
|
||||
pMilitia->bSectorZ == pSectorZ )
|
||||
{ //We have militia and enemies and no mercs! Let's finish this battle in autoresolve.
|
||||
gfEnteringMapScreen = TRUE;
|
||||
gfEnteringMapScreenToEnterPreBattleInterface = TRUE;
|
||||
@@ -6587,14 +6594,15 @@ BOOLEAN CheckAndHandleUnloadingOfCurrentWorld( )
|
||||
{
|
||||
for ( i = gTacticalStatus.Team[OUR_TEAM].bFirstID; i <= gTacticalStatus.Team[OUR_TEAM].bLastID; i++ )
|
||||
{ //If we have a live and valid soldier
|
||||
if ( MercPtrs[i]->bActive && MercPtrs[i]->stats.bLife && !MercPtrs[i]->flags.fBetweenSectors && !(MercPtrs[i]->flags.uiStatusFlags & SOLDIER_VEHICLE) && !AM_A_ROBOT( MercPtrs[i] ) && !AM_AN_EPC( MercPtrs[i] ) )
|
||||
SOLDIERTYPE *pSoldier = MercPtrs[i];
|
||||
if ( pSoldier->bActive && pSoldier->stats.bLife && !pSoldier->flags.fBetweenSectors && !(pSoldier->flags.uiStatusFlags & SOLDIER_VEHICLE) && !AM_A_ROBOT( pSoldier ) && !AM_AN_EPC( pSoldier ) )
|
||||
{
|
||||
if ( MercPtrs[i]->sSectorX == gWorldSectorX &&
|
||||
MercPtrs[i]->sSectorY == gWorldSectorY &&
|
||||
MercPtrs[i]->bSectorZ == gbWorldSectorZ )
|
||||
if ( pSoldier->sSectorX == gWorldSectorX &&
|
||||
pSoldier->sSectorY == gWorldSectorY &&
|
||||
pSoldier->bSectorZ == gbWorldSectorZ )
|
||||
{
|
||||
MercPtrs[i]->RemoveSoldierFromGridNo( );
|
||||
InitSoldierOppList( MercPtrs[i] );
|
||||
pSoldier->RemoveSoldierFromGridNo( );
|
||||
InitSoldierOppList( pSoldier );
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -6604,11 +6612,12 @@ BOOLEAN CheckAndHandleUnloadingOfCurrentWorld( )
|
||||
{ //Check and see if we have any live mercs in the sector.
|
||||
for ( i = gTacticalStatus.Team[OUR_TEAM].bFirstID; i <= gTacticalStatus.Team[OUR_TEAM].bLastID; i++ )
|
||||
{ //If we have a live and valid soldier
|
||||
if ( MercPtrs[i]->bActive && MercPtrs[i]->stats.bLife && !MercPtrs[i]->flags.fBetweenSectors && !(MercPtrs[i]->flags.uiStatusFlags & SOLDIER_VEHICLE) && !AM_A_ROBOT( MercPtrs[i] ) && !AM_AN_EPC( MercPtrs[i] ) )
|
||||
SOLDIERTYPE *pSoldier = MercPtrs[i];
|
||||
if ( pSoldier->bActive && pSoldier->stats.bLife && !pSoldier->flags.fBetweenSectors && !(pSoldier->flags.uiStatusFlags & SOLDIER_VEHICLE) && !AM_A_ROBOT( pSoldier ) && !AM_AN_EPC( pSoldier ) )
|
||||
{
|
||||
if ( MercPtrs[i]->sSectorX == gWorldSectorX &&
|
||||
MercPtrs[i]->sSectorY == gWorldSectorY &&
|
||||
MercPtrs[i]->bSectorZ == gbWorldSectorZ )
|
||||
if ( pSoldier->sSectorX == gWorldSectorX &&
|
||||
pSoldier->sSectorY == gWorldSectorY &&
|
||||
pSoldier->bSectorZ == gbWorldSectorZ )
|
||||
{
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
@@ -210,11 +210,11 @@ BOOLEAN EscapeDirectionIsValid( INT8 * pbDirection );
|
||||
bool IsEscapeDirectionValid(WorldDirections pbDirection);
|
||||
//Used for determining the type of error message that comes up when you can't traverse to
|
||||
//an adjacent sector. THESE VALUES DO NOT NEED TO BE SAVED!
|
||||
extern BOOLEAN gfInvalidTraversal;
|
||||
extern BOOLEAN gfLoneEPCAttemptingTraversal;
|
||||
extern BOOLEAN gfRobotWithoutControllerAttemptingTraversal;
|
||||
extern UINT8 gubLoneMercAttemptingToAbandonEPCs;
|
||||
extern INT8 gbPotentiallyAbandonedEPCSlotID;
|
||||
extern BOOLEAN gfInvalidTraversal;
|
||||
extern BOOLEAN gfLoneEPCAttemptingTraversal;
|
||||
extern BOOLEAN gfRobotWithoutControllerAttemptingTraversal;
|
||||
extern UINT8 gubLoneMercAttemptingToAbandonEPCs;
|
||||
extern SoldierID gbPotentiallyAbandonedEPCSlotID;
|
||||
|
||||
extern INT8 gbGreenToElitePromotions;
|
||||
extern INT8 gbGreenToRegPromotions;
|
||||
|
||||
@@ -3224,7 +3224,7 @@ void HandleNPCDoAction( UINT8 ubTargetNPC, UINT16 usActionCode, UINT8 ubQuoteNum
|
||||
if ( pSoldier )
|
||||
{
|
||||
INT32 sNearestPC;
|
||||
UINT16 ubID;
|
||||
SoldierID ubID;
|
||||
INT8 bMoneySlot;
|
||||
INT8 bEmptySlot;
|
||||
|
||||
@@ -3235,7 +3235,7 @@ void HandleNPCDoAction( UINT8 ubTargetNPC, UINT16 usActionCode, UINT8 ubQuoteNum
|
||||
ubID = WhoIsThere2( sNearestPC, 0 );
|
||||
if (ubID != NOBODY)
|
||||
{
|
||||
pSoldier2 = MercPtrs[ ubID ];
|
||||
pSoldier2 = ubID;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -3357,7 +3357,7 @@ void HandleNPCDoAction( UINT8 ubTargetNPC, UINT16 usActionCode, UINT8 ubQuoteNum
|
||||
pSoldier = FindSoldierByProfileID( ubTargetNPC, FALSE );
|
||||
if (pSoldier)
|
||||
{
|
||||
UINT16 ubTargetID;
|
||||
SoldierID ubTargetID;
|
||||
SOLDIERTYPE *pTarget;
|
||||
|
||||
// Target a different merc....
|
||||
@@ -3384,7 +3384,7 @@ void HandleNPCDoAction( UINT8 ubTargetNPC, UINT16 usActionCode, UINT8 ubQuoteNum
|
||||
}
|
||||
else
|
||||
{
|
||||
pTarget = MercPtrs[ ubTargetID ];
|
||||
pTarget = ubTargetID;
|
||||
}
|
||||
|
||||
// Use a different approach....
|
||||
@@ -3477,7 +3477,7 @@ void HandleNPCDoAction( UINT8 ubTargetNPC, UINT16 usActionCode, UINT8 ubQuoteNum
|
||||
pSoldier = FindSoldierByProfileID( ubTargetNPC, FALSE );
|
||||
if (pSoldier)
|
||||
{
|
||||
UINT16 ubTargetID;
|
||||
SoldierID ubTargetID;
|
||||
SOLDIERTYPE *pTarget;
|
||||
INT32 cnt;
|
||||
BOOLEAN fGoodTarget = FALSE;
|
||||
@@ -3491,7 +3491,7 @@ void HandleNPCDoAction( UINT8 ubTargetNPC, UINT16 usActionCode, UINT8 ubQuoteNum
|
||||
}
|
||||
else
|
||||
{
|
||||
pTarget = MercPtrs[ ubTargetID ];
|
||||
pTarget = ubTargetID;
|
||||
}
|
||||
|
||||
pSoldier->aiData.uiPendingActionData4 = APPROACH_DONE_PUNCH_1;
|
||||
@@ -3901,7 +3901,7 @@ void HandleNPCDoAction( UINT8 ubTargetNPC, UINT16 usActionCode, UINT8 ubQuoteNum
|
||||
if ( !gfInTalkPanel )
|
||||
{
|
||||
INT32 sNearestPC;
|
||||
UINT16 ubID;
|
||||
SoldierID ubID;
|
||||
|
||||
pSoldier = FindSoldierByProfileID( ubTargetNPC, FALSE );
|
||||
if ( pSoldier )
|
||||
@@ -3914,7 +3914,7 @@ void HandleNPCDoAction( UINT8 ubTargetNPC, UINT16 usActionCode, UINT8 ubQuoteNum
|
||||
ubID = WhoIsThere2( sNearestPC, 0 );
|
||||
if (ubID != NOBODY)
|
||||
{
|
||||
pSoldier2 = MercPtrs[ ubID ];
|
||||
pSoldier2 = ubID;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -9185,10 +9185,10 @@ BOOLEAN HandleItemPointerClick( INT32 usMapPos )
|
||||
usItem = gpItemPointer->usItem;
|
||||
|
||||
// If the target is a robot,
|
||||
if ( MercPtrs[ ubSoldierID ]->flags.uiStatusFlags & SOLDIER_ROBOT )
|
||||
if ( ubSoldierID->flags.uiStatusFlags & SOLDIER_ROBOT )
|
||||
{
|
||||
// Charge APs to reload robot!
|
||||
sAPCost = GetAPsToReloadRobot( gpItemPointerSoldier, MercPtrs[ ubSoldierID ] );
|
||||
sAPCost = GetAPsToReloadRobot( gpItemPointerSoldier, ubSoldierID );
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -9208,12 +9208,12 @@ BOOLEAN HandleItemPointerClick( INT32 usMapPos )
|
||||
// }
|
||||
/*
|
||||
//if the user just clicked on an arms dealer
|
||||
if( IsMercADealer( MercPtrs[ ubSoldierID ]->ubProfile ) )
|
||||
if( IsMercADealer( ubSoldierID->ubProfile ) )
|
||||
{
|
||||
if ( EnoughPoints( gpItemPointerSoldier, sAPCost, 0, TRUE ) )
|
||||
{
|
||||
//Enter the shopkeeper interface
|
||||
EnterShopKeeperInterfaceScreen( MercPtrs[ ubSoldierID ]->ubProfile );
|
||||
EnterShopKeeperInterfaceScreen( ubSoldierID->ubProfile );
|
||||
|
||||
EndItemPointer( );
|
||||
}
|
||||
@@ -9225,10 +9225,10 @@ BOOLEAN HandleItemPointerClick( INT32 usMapPos )
|
||||
if ( EnoughPoints( gpItemPointerSoldier, sAPCost, 0, TRUE ) )
|
||||
{
|
||||
// If we are a robot, check if this is proper item to reload!
|
||||
if ( MercPtrs[ ubSoldierID ]->flags.uiStatusFlags & SOLDIER_ROBOT )
|
||||
if ( ubSoldierID->flags.uiStatusFlags & SOLDIER_ROBOT )
|
||||
{
|
||||
// Check if we can reload robot....
|
||||
if ( IsValidAmmoToReloadRobot( MercPtrs[ ubSoldierID ], &gTempObject ) )
|
||||
if ( IsValidAmmoToReloadRobot( ubSoldierID, &gTempObject ) )
|
||||
{
|
||||
INT32 sActionGridNo;
|
||||
UINT8 ubDirection;
|
||||
@@ -9236,7 +9236,7 @@ BOOLEAN HandleItemPointerClick( INT32 usMapPos )
|
||||
|
||||
// Walk up to him and reload!
|
||||
// See if we can get there to stab
|
||||
sActionGridNo = FindAdjacentGridEx( gpItemPointerSoldier, MercPtrs[ ubSoldierID ]->sGridNo, &ubDirection, &sAdjustedGridNo, TRUE, FALSE );
|
||||
sActionGridNo = FindAdjacentGridEx( gpItemPointerSoldier, ubSoldierID->sGridNo, &ubDirection, &sAdjustedGridNo, TRUE, FALSE );
|
||||
|
||||
if ( sActionGridNo != -1 && gbItemPointerSrcSlot != NO_SLOT )
|
||||
{
|
||||
@@ -9279,16 +9279,16 @@ BOOLEAN HandleItemPointerClick( INT32 usMapPos )
|
||||
//if (gbItemPointerSrcSlot != NO_SLOT )
|
||||
{
|
||||
// Give guy this item.....
|
||||
SoldierGiveItem( gpItemPointerSoldier, MercPtrs[ ubSoldierID ], &gTempObject, gbItemPointerSrcSlot );
|
||||
SoldierGiveItem( gpItemPointerSoldier, ubSoldierID, &gTempObject, gbItemPointerSrcSlot );
|
||||
|
||||
gfDontChargeAPsToPickup = FALSE;
|
||||
EndItemPointer( );
|
||||
|
||||
// If we are giving it to somebody not on our team....
|
||||
if ( gMercProfiles[MercPtrs[ubSoldierID]->ubProfile].Type == PROFILETYPE_AIM ||
|
||||
gMercProfiles[MercPtrs[ubSoldierID]->ubProfile].Type == PROFILETYPE_MERC ||
|
||||
gMercProfiles[MercPtrs[ubSoldierID]->ubProfile].Type == PROFILETYPE_IMP
|
||||
|| RPC_RECRUITED( MercPtrs[ubSoldierID] ) )
|
||||
if ( gMercProfiles[ubSoldierID->ubProfile].Type == PROFILETYPE_AIM ||
|
||||
gMercProfiles[ubSoldierID->ubProfile].Type == PROFILETYPE_MERC ||
|
||||
gMercProfiles[ubSoldierID->ubProfile].Type == PROFILETYPE_IMP
|
||||
|| RPC_RECRUITED( ubSoldierID ) )
|
||||
{
|
||||
|
||||
}
|
||||
@@ -10533,7 +10533,7 @@ void ItemPopupRegionCallback( MOUSE_REGION * pRegion, INT32 iReason )
|
||||
{
|
||||
UINT32 uiItemPos;
|
||||
UINT32 iItemCap;
|
||||
INT32 ubID;
|
||||
SoldierID ubID;
|
||||
CHAR16 sString[ 128 ];
|
||||
|
||||
uiItemPos = MSYS_GetRegionUserData( pRegion, 0 );
|
||||
@@ -10625,11 +10625,11 @@ void ItemPopupRegionCallback( MOUSE_REGION * pRegion, INT32 iReason )
|
||||
fTeamPanelDirty=TRUE;
|
||||
|
||||
// remember which gridno the object came from
|
||||
sObjectSourceGridNo = MercPtrs[ubID]->sGridNo;
|
||||
sObjectSourceGridNo = ubID->sGridNo;
|
||||
// and who owned it last
|
||||
gpItemPointerSoldier = MercPtrs[ubID];
|
||||
gpItemPointerSoldier = ubID;
|
||||
|
||||
ReevaluateItemHatches( MercPtrs[ubID], FALSE );
|
||||
ReevaluateItemHatches( ubID, FALSE );
|
||||
}
|
||||
|
||||
//Dirty interface
|
||||
|
||||
@@ -4513,17 +4513,18 @@ void BtnDropPackCallback(GUI_BUTTON *btn,INT32 reason)
|
||||
INT8 bAssignment = gpSMCurrentMerc->bAssignment;
|
||||
for( int x = gTacticalStatus.Team[ OUR_TEAM ].bFirstID; x <= gTacticalStatus.Team[ OUR_TEAM ].bLastID; x++ )
|
||||
{
|
||||
SOLDIERTYPE *pSoldier = MercPtrs[x];
|
||||
/* Is DropPackFlag currently false and is there something in the backpack pocket? If so, we haven't
|
||||
dropped a pack yet and apparently want to*/
|
||||
if(MercPtrs[x]->bAssignment == bAssignment && MercPtrs[x]->inv[BPACKPOCKPOS].exists() == true && !MercPtrs[x]->flags.DropPackFlag)
|
||||
if(pSoldier->bAssignment == bAssignment && pSoldier->inv[BPACKPOCKPOS].exists() == true && !pSoldier->flags.DropPackFlag)
|
||||
{
|
||||
ChangeDropPackStatus(MercPtrs[x], TRUE);
|
||||
ChangeDropPackStatus(pSoldier, TRUE);
|
||||
}
|
||||
/* Is DropPackFlag currently true, is nothing in the backpack pocket and have we dropped a pack? If so, we
|
||||
must want to retreive a backpack we previously dropped.*/
|
||||
else if(MercPtrs[x]->bAssignment == bAssignment && MercPtrs[x]->inv[BPACKPOCKPOS].exists() == false && MercPtrs[x]->flags.DropPackFlag)
|
||||
else if(pSoldier->bAssignment == bAssignment && pSoldier->inv[BPACKPOCKPOS].exists() == false && pSoldier->flags.DropPackFlag)
|
||||
{
|
||||
ChangeDropPackStatus(MercPtrs[x], FALSE);
|
||||
ChangeDropPackStatus(pSoldier, FALSE);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
+12
-10
@@ -7223,8 +7223,10 @@ void MoveBullet( INT32 iBullet )
|
||||
}
|
||||
else if (pStructure->fFlags & STRUCTURE_PERSON)
|
||||
{
|
||||
SOLDIERTYPE *pSoldier = MercPtrs[pStructure->usStructureID];
|
||||
|
||||
// HEADROCK HAM 5: Fragments can hit the shooter.
|
||||
if ( MercPtrs[ pStructure->usStructureID ] != pBullet->pFirer || pBullet->fFragment == TRUE )
|
||||
if ( pSoldier != pBullet->pFirer || pBullet->fFragment == TRUE )
|
||||
{
|
||||
// in actually moving the bullet, we consider only count friends as targets if the bullet is unaimed
|
||||
// (buckshot), if they are the intended target, or beyond the range of automatic friendly fire hits
|
||||
@@ -7243,13 +7245,13 @@ void MoveBullet( INT32 iBullet )
|
||||
else if ( pBullet->pFirer->flags.uiStatusFlags & SOLDIER_MONSTER )
|
||||
{
|
||||
// monsters firing will always accidentally hit people but never accidentally hit each other.
|
||||
if ( !(MercPtrs[ pStructure->usStructureID ]->flags.uiStatusFlags & SOLDIER_MONSTER) )
|
||||
if ( !(pSoldier->flags.uiStatusFlags & SOLDIER_MONSTER) )
|
||||
{
|
||||
gpLocalStructure[iNumLocalStructures] = pStructure;
|
||||
iNumLocalStructures++;
|
||||
}
|
||||
}
|
||||
else if (MercPtrs[pStructure->usStructureID]->bVisible == TRUE &&
|
||||
else if (pSoldier->bVisible == TRUE &&
|
||||
PositionAllowsHit(pBullet, pStructure) &&
|
||||
(pBullet->fAimed && pBullet->iLoop > MIN_DIST_FOR_HIT_FRIENDS ||
|
||||
!pBullet->fAimed && pBullet->iLoop > MIN_DIST_FOR_HIT_FRIENDS_UNAIMED ||
|
||||
@@ -7261,16 +7263,16 @@ void MoveBullet( INT32 iBullet )
|
||||
}
|
||||
|
||||
// this might be a close call
|
||||
if ( pBullet->ubFirerID != NOBODY && MercPtrs[ pStructure->usStructureID ]->bTeam == gbPlayerNum && pBullet->pFirer->bTeam != gbPlayerNum && sDesiredLevel == MercPtrs[ pStructure->usStructureID ]->pathing.bLevel )
|
||||
if ( pBullet->ubFirerID != NOBODY && pSoldier->bTeam == gbPlayerNum && pBullet->pFirer->bTeam != gbPlayerNum && sDesiredLevel == pSoldier->pathing.bLevel )
|
||||
{
|
||||
MercPtrs[ pStructure->usStructureID ]->flags.fCloseCall = TRUE;
|
||||
pSoldier->flags.fCloseCall = TRUE;
|
||||
}
|
||||
|
||||
if ( IS_MERC_BODY_TYPE( MercPtrs[pStructure->usStructureID] ) )
|
||||
if ( IS_MERC_BODY_TYPE( pSoldier ) )
|
||||
{
|
||||
// apply suppression, regardless of friendly or enemy
|
||||
// except if friendly, not within a few tiles of shooter
|
||||
if (pBullet->ubFirerID == NOBODY || MercPtrs[pStructure->usStructureID]->bSide != pBullet->pFirer->bSide || pBullet->iLoop > gGameExternalOptions.usMinDistanceFriendlySuppression)
|
||||
if (pBullet->ubFirerID == NOBODY || pSoldier->bSide != pBullet->pFirer->bSide || pBullet->iLoop > gGameExternalOptions.usMinDistanceFriendlySuppression)
|
||||
{
|
||||
// buckshot has only a 1 in 2 chance of applying a suppression point
|
||||
// HEADROCK HAM 5: For NCTH, make pellets as effective as any other bullet.
|
||||
@@ -7279,7 +7281,7 @@ void MoveBullet( INT32 iBullet )
|
||||
if (!(pBullet->usFlags & BULLET_FLAG_BUCKSHOT) || Chance(gGameExternalOptions.ubBuckshotSuppressionEffectiveness))
|
||||
{
|
||||
// bullet goes whizzing by this guy!
|
||||
switch ( gAnimControl[ MercPtrs[pStructure->usStructureID]->usAnimState ].ubEndHeight )
|
||||
switch ( gAnimControl[ pSoldier->usAnimState ].ubEndHeight )
|
||||
{
|
||||
case ANIM_PRONE:
|
||||
// two 1/4 chances of avoiding suppression pt - one below
|
||||
@@ -7296,8 +7298,8 @@ void MoveBullet( INT32 iBullet )
|
||||
}
|
||||
// else fall through
|
||||
default:
|
||||
MercPtrs[pStructure->usStructureID]->ubSuppressionPoints++;
|
||||
MercPtrs[pStructure->usStructureID]->ubSuppressorID = pBullet->ubFirerID;
|
||||
pSoldier->ubSuppressionPoints++;
|
||||
pSoldier->ubSuppressorID = pBullet->ubFirerID;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
+2
-1
@@ -315,7 +315,8 @@ void DecayTacticalMoraleModifiers( void )
|
||||
fHandleNervous = TRUE;
|
||||
for ( ubLoop2 = gTacticalStatus.Team[ gbPlayerNum ].bFirstID; ubLoop2 <= gTacticalStatus.Team[ gbPlayerNum ].bLastID; ubLoop2++ )
|
||||
{
|
||||
if ( MercPtrs[ ubLoop2 ] != pSoldier && MercPtrs[ ubLoop2 ]->bActive && MercPtrs[ ubLoop2 ]->sSectorX == pSoldier->sSectorX && MercPtrs[ ubLoop2 ]->sSectorY == pSoldier->sSectorY && MercPtrs[ ubLoop2 ]->bSectorZ == pSoldier->bSectorZ )
|
||||
SOLDIERTYPE *pSoldier = MercPtrs[ubLoop2];
|
||||
if ( pSoldier != pSoldier && pSoldier->bActive && pSoldier->sSectorX == pSoldier->sSectorX && pSoldier->sSectorY == pSoldier->sSectorY && pSoldier->bSectorZ == pSoldier->bSectorZ )
|
||||
{
|
||||
// found someone!
|
||||
fHandleNervous = FALSE;
|
||||
|
||||
+2
-2
@@ -2198,7 +2198,7 @@ INT32 FindBestPath(SOLDIERTYPE *s , INT32 sDestination, INT8 bLevel, INT16 usMov
|
||||
INT8 bLoopState = LOOPING_CLOCKWISE;
|
||||
//BOOLEAN fLoopForwards = FALSE;
|
||||
BOOLEAN fCheckedBehind = FALSE;
|
||||
UINT16 ubMerc;
|
||||
SoldierID ubMerc;
|
||||
INT32 iDestX,iDestY, iLocX, iLocY, dx, dy;
|
||||
INT32 newLoc,curLoc;
|
||||
//INT32 curY;
|
||||
@@ -3145,7 +3145,7 @@ if(!GridNoOnVisibleWorldTile(iDestination))
|
||||
|
||||
// sevenfm: for player mercs, ignore invisible opponents
|
||||
if (ubMerc < TOTAL_SOLDIERS && ubMerc != s->ubID &&
|
||||
(!(s->flags.uiStatusFlags & SOLDIER_PC) || MercPtrs[ubMerc]->bSide == s->bSide || MercPtrs[ubMerc]->aiData.bNeutral || MercPtrs[ubMerc]->bVisible >= 0 || SoldierToSoldierLineOfSightTest(s, MercPtrs[ubMerc], TRUE, CALC_FROM_ALL_DIRS)))
|
||||
(!(s->flags.uiStatusFlags & SOLDIER_PC) || ubMerc->bSide == s->bSide || ubMerc->aiData.bNeutral || ubMerc->bVisible >= 0 || SoldierToSoldierLineOfSightTest(s, ubMerc, TRUE, CALC_FROM_ALL_DIRS)))
|
||||
//if ( ubMerc < TOTAL_SOLDIERS && ubMerc != s->ubID )
|
||||
{
|
||||
goto NEXTDIR;
|
||||
|
||||
@@ -6537,9 +6537,7 @@ BOOLEAN SKITryToReturnInvToOwnerOrCurrentMerc( INVENTORY_IN_SLOT *pInv )
|
||||
// if it does have an owner
|
||||
if( pInv->ubIdOfMercWhoOwnsTheItem != NO_PROFILE )
|
||||
{
|
||||
INT16 sSoldierID;
|
||||
|
||||
sSoldierID = GetSoldierIDFromMercID( pInv->ubIdOfMercWhoOwnsTheItem );
|
||||
SoldierID sSoldierID = GetSoldierIDFromMercID( pInv->ubIdOfMercWhoOwnsTheItem );
|
||||
// if that soldier is not in player's hire any longer
|
||||
if ( sSoldierID == -1 )
|
||||
{
|
||||
@@ -6548,13 +6546,13 @@ BOOLEAN SKITryToReturnInvToOwnerOrCurrentMerc( INVENTORY_IN_SLOT *pInv )
|
||||
|
||||
// For owners of repaired items, this checks that owner is still hired, in sector,
|
||||
// on current squad, close enough to the shopkeeper, etc.
|
||||
if ( !CanMercInteractWithSelectedShopkeeper( MercPtrs[ sSoldierID ] ) )
|
||||
if ( !CanMercInteractWithSelectedShopkeeper( sSoldierID ) )
|
||||
{
|
||||
return(FALSE);
|
||||
}
|
||||
|
||||
// Try to find a place to put in its owner's inventory (regardless of which merc is currently displayed!)
|
||||
if ( SKITryToAddInvToMercsInventory( pInv, MercPtrs[ sSoldierID ] ) )
|
||||
if ( SKITryToAddInvToMercsInventory( pInv, sSoldierID ) )
|
||||
{
|
||||
return( TRUE );
|
||||
}
|
||||
|
||||
+14
-17
@@ -3126,15 +3126,11 @@ BOOLEAN AdjustToNextAnimationFrame( SOLDIERTYPE *pSoldier )
|
||||
|
||||
// Reload robot....
|
||||
{
|
||||
UINT16 ubPerson;
|
||||
SOLDIERTYPE *pRobot;
|
||||
SoldierID ubPerson = WhoIsThere2( pSoldier->aiData.sPendingActionData2, pSoldier->pathing.bLevel );
|
||||
|
||||
// Get pointer...
|
||||
ubPerson = WhoIsThere2( pSoldier->aiData.sPendingActionData2, pSoldier->pathing.bLevel );
|
||||
|
||||
if ( ubPerson != NOBODY && MercPtrs[ ubPerson ]->flags.uiStatusFlags & SOLDIER_ROBOT )
|
||||
if ( ubPerson != NOBODY && ubPerson->flags.uiStatusFlags & SOLDIER_ROBOT )
|
||||
{
|
||||
pRobot = MercPtrs[ ubPerson ];
|
||||
SOLDIERTYPE *pRobot = ubPerson;
|
||||
|
||||
ReloadGun( pRobot, &(pRobot->inv[ HANDPOS ] ), pSoldier->pTempObject );
|
||||
|
||||
@@ -3658,50 +3654,51 @@ void SayBuddyWitnessedQuoteFromKill( SOLDIERTYPE *pKillerSoldier, INT32 sGridNo,
|
||||
if ( ubNumMercs > 0 )
|
||||
{
|
||||
ubChosenMerc = (UINT16)Random( ubNumMercs );
|
||||
SOLDIERTYPE *pChosen = MercPtrs[ubMercsInSector[ubChosenMerc]];
|
||||
|
||||
switch( bBuddyIndex[ ubChosenMerc ] )
|
||||
{
|
||||
case 0:
|
||||
usQuoteNum = QUOTE_BUDDY_1_GOOD;
|
||||
MercPtrs[ ubMercsInSector[ ubChosenMerc ] ]->usQuoteSaidExtFlags |= SOLDIER_QUOTE_SAID_BUDDY_1_WITNESSED;
|
||||
pChosen->usQuoteSaidExtFlags |= SOLDIER_QUOTE_SAID_BUDDY_1_WITNESSED;
|
||||
break;
|
||||
|
||||
case 1:
|
||||
usQuoteNum = QUOTE_BUDDY_2_GOOD;
|
||||
MercPtrs[ ubMercsInSector[ ubChosenMerc ] ]->usQuoteSaidExtFlags |= SOLDIER_QUOTE_SAID_BUDDY_2_WITNESSED;
|
||||
pChosen->usQuoteSaidExtFlags |= SOLDIER_QUOTE_SAID_BUDDY_2_WITNESSED;
|
||||
break;
|
||||
|
||||
case 2:
|
||||
if( MercPtrs[ ubMercsInSector[ ubChosenMerc ] ]->ubWhatKindOfMercAmI == MERC_TYPE__AIM_MERC )
|
||||
if( pChosen->ubWhatKindOfMercAmI == MERC_TYPE__AIM_MERC )
|
||||
usQuoteNum = QUOTE_AIM_BUDDY_3_GOOD;
|
||||
else
|
||||
usQuoteNum = QUOTE_NON_AIM_BUDDY_3_GOOD;
|
||||
MercPtrs[ ubMercsInSector[ ubChosenMerc ] ]->usQuoteSaidExtFlags |= SOLDIER_QUOTE_SAID_BUDDY_3_WITNESSED;
|
||||
pChosen->usQuoteSaidExtFlags |= SOLDIER_QUOTE_SAID_BUDDY_3_WITNESSED;
|
||||
break;
|
||||
|
||||
case 3:
|
||||
if( MercPtrs[ ubMercsInSector[ ubChosenMerc ] ]->ubWhatKindOfMercAmI == MERC_TYPE__AIM_MERC )
|
||||
if( pChosen->ubWhatKindOfMercAmI == MERC_TYPE__AIM_MERC )
|
||||
usQuoteNum = QUOTE_AIM_BUDDY_4_GOOD;
|
||||
else
|
||||
usQuoteNum = QUOTE_NON_AIM_BUDDY_4_GOOD;
|
||||
MercPtrs[ ubMercsInSector[ ubChosenMerc ] ]->usQuoteSaidExtFlags |= SOLDIER_QUOTE_SAID_BUDDY_4_WITNESSED;
|
||||
pChosen->usQuoteSaidExtFlags |= SOLDIER_QUOTE_SAID_BUDDY_4_WITNESSED;
|
||||
break;
|
||||
|
||||
case 4:
|
||||
if( MercPtrs[ ubMercsInSector[ ubChosenMerc ] ]->ubWhatKindOfMercAmI == MERC_TYPE__AIM_MERC )
|
||||
if( pChosen->ubWhatKindOfMercAmI == MERC_TYPE__AIM_MERC )
|
||||
usQuoteNum = QUOTE_AIM_BUDDY_5_GOOD;
|
||||
else
|
||||
usQuoteNum = QUOTE_NON_AIM_BUDDY_5_GOOD;
|
||||
MercPtrs[ ubMercsInSector[ ubChosenMerc ] ]->usQuoteSaidExtFlags |= SOLDIER_QUOTE_SAID_BUDDY_5_WITNESSED;
|
||||
pChosen->usQuoteSaidExtFlags |= SOLDIER_QUOTE_SAID_BUDDY_5_WITNESSED;
|
||||
break;
|
||||
|
||||
case 5:
|
||||
usQuoteNum = QUOTE_LEARNED_TO_LIKE_WITNESSED;
|
||||
MercPtrs[ ubMercsInSector[ ubChosenMerc ] ]->usQuoteSaidExtFlags |= SOLDIER_QUOTE_SAID_BUDDY_6_WITNESSED;
|
||||
pChosen->usQuoteSaidExtFlags |= SOLDIER_QUOTE_SAID_BUDDY_6_WITNESSED;
|
||||
break;
|
||||
}
|
||||
|
||||
TacticalCharacterDialogue( MercPtrs[ ubMercsInSector[ ubChosenMerc ] ], usQuoteNum );
|
||||
TacticalCharacterDialogue( pChosen, usQuoteNum );
|
||||
|
||||
buddyquoteused = TRUE;
|
||||
}
|
||||
|
||||
@@ -116,13 +116,13 @@ BOOLEAN SelectiveFindSoldierFromMouse( SoldierID *pusSoldierIndex, UINT32 *pMerc
|
||||
}
|
||||
|
||||
|
||||
UINT32 GetSoldierFindFlags( const SoldierID ubID )
|
||||
UINT32 GetSoldierFindFlags( SoldierID ubID )
|
||||
{
|
||||
UINT32 MercFlags = 0;
|
||||
SOLDIERTYPE *pSoldier;
|
||||
|
||||
// Get pSoldier!
|
||||
pSoldier = MercPtrs[ ubID ];
|
||||
pSoldier = ubID;
|
||||
|
||||
// Find out and set flags
|
||||
if ( ubID == gusSelectedSoldier )
|
||||
@@ -530,13 +530,13 @@ SOLDIERTYPE * SimpleFindSoldier( INT32 sGridNo, INT8 bLevel )
|
||||
}
|
||||
else
|
||||
{
|
||||
return( MercPtrs[ ubID ] );
|
||||
return( ubID );
|
||||
}
|
||||
}
|
||||
|
||||
BOOLEAN IsValidTargetMerc( SoldierID ubSoldierID )
|
||||
{
|
||||
SOLDIERTYPE *pSoldier = MercPtrs[ ubSoldierID ];
|
||||
SOLDIERTYPE *pSoldier = ubSoldierID;
|
||||
|
||||
|
||||
// CHECK IF ACTIVE!
|
||||
|
||||
+22
-25
@@ -96,8 +96,6 @@ void OutputDebugInfoForTurnBasedNextTileWaiting( SOLDIERTYPE * pSoldier )
|
||||
|
||||
void SetDelayedTileWaiting( SOLDIERTYPE *pSoldier, INT32 sCauseGridNo, INT8 bValue )
|
||||
{
|
||||
UINT16 ubPerson;
|
||||
|
||||
// Cancel AI Action
|
||||
// CancelAIAction( pSoldier, TRUE );
|
||||
|
||||
@@ -108,7 +106,7 @@ void SetDelayedTileWaiting( SOLDIERTYPE *pSoldier, INT32 sCauseGridNo, INT8 bVal
|
||||
|
||||
// ATE: Now update realtime movement speed....
|
||||
// check if guy exists here...
|
||||
ubPerson = WhoIsThere2( sCauseGridNo, pSoldier->pathing.bLevel );
|
||||
SoldierID ubPerson = WhoIsThere2( sCauseGridNo, pSoldier->pathing.bLevel );
|
||||
|
||||
// There may not be anybody there, but it's reserved by them!
|
||||
if ( ( gpWorldLevelData[ sCauseGridNo ].uiFlags & MAPELEMENT_MOVEMENT_RESERVED ) )
|
||||
@@ -119,7 +117,7 @@ void SetDelayedTileWaiting( SOLDIERTYPE *pSoldier, INT32 sCauseGridNo, INT8 bVal
|
||||
if ( ubPerson != NOBODY )
|
||||
{
|
||||
// if they are our own team members ( both )
|
||||
if ( MercPtrs[ ubPerson ]->bTeam == gbPlayerNum && pSoldier->bTeam == gbPlayerNum )
|
||||
if ( ubPerson->bTeam == gbPlayerNum && pSoldier->bTeam == gbPlayerNum )
|
||||
{
|
||||
// Here we have another guy.... save his stats so we can use them for
|
||||
// speed determinations....
|
||||
@@ -205,7 +203,6 @@ void UnMarkMovementReserved( SOLDIERTYPE *pSoldier )
|
||||
|
||||
INT8 TileIsClear( SOLDIERTYPE *pSoldier, INT8 bDirection, INT32 sGridNo, INT8 bLevel )
|
||||
{
|
||||
UINT16 ubPerson;
|
||||
INT32 sTempDestGridNo;
|
||||
INT32 sNewGridNo;
|
||||
BOOLEAN fSwapInDoor = FALSE;
|
||||
@@ -225,7 +222,7 @@ INT8 TileIsClear( SOLDIERTYPE *pSoldier, INT8 bDirection, INT32 sGridNo, INT8 b
|
||||
return( MOVE_TILE_CLEAR );
|
||||
}
|
||||
|
||||
ubPerson = WhoIsThere2( sGridNo, bLevel );
|
||||
SoldierID ubPerson = WhoIsThere2( sGridNo, bLevel );
|
||||
|
||||
|
||||
if ( ubPerson != NOBODY )
|
||||
@@ -243,7 +240,7 @@ INT8 TileIsClear( SOLDIERTYPE *pSoldier, INT8 bDirection, INT32 sGridNo, INT8 b
|
||||
|
||||
// Are we only temporarily blocked?
|
||||
// Check if our final destination is = our gridno
|
||||
if ( ( MercPtrs[ ubPerson ]->pathing.sFinalDestination == MercPtrs[ ubPerson ]->sGridNo ) )
|
||||
if ( ( ubPerson->pathing.sFinalDestination == ubPerson->sGridNo ) )
|
||||
{
|
||||
return( MOVE_TILE_STATIONARY_BLOCKED );
|
||||
}
|
||||
@@ -251,12 +248,12 @@ INT8 TileIsClear( SOLDIERTYPE *pSoldier, INT8 bDirection, INT32 sGridNo, INT8 b
|
||||
{
|
||||
// OK, if buddy who is blocking us is trying to move too...
|
||||
// And we are in opposite directions...
|
||||
if ( MercPtrs[ ubPerson ]->flags.fBlockedByAnotherMerc && MercPtrs[ ubPerson ]->bBlockedByAnotherMercDirection == gOppositeDirection[ bDirection ] )
|
||||
if ( ubPerson->flags.fBlockedByAnotherMerc && ubPerson->bBlockedByAnotherMercDirection == gOppositeDirection[ bDirection ] )
|
||||
{
|
||||
// OK, try and get a path around buddy....
|
||||
// We have to temporarily make buddy stopped...
|
||||
sTempDestGridNo = MercPtrs[ ubPerson ]->pathing.sFinalDestination;
|
||||
MercPtrs[ ubPerson ]->pathing.sFinalDestination = MercPtrs[ ubPerson ]->sGridNo;
|
||||
sTempDestGridNo = ubPerson->pathing.sFinalDestination;
|
||||
ubPerson->pathing.sFinalDestination = ubPerson->sGridNo;
|
||||
|
||||
if ( PlotPath( pSoldier, pSoldier->pathing.sFinalDestination, NO_COPYROUTE, NO_PLOT, TEMPORARY, pSoldier->usUIMovementMode, NOT_STEALTH, FORWARD, pSoldier->bActionPoints ) )
|
||||
{
|
||||
@@ -264,7 +261,7 @@ INT8 TileIsClear( SOLDIERTYPE *pSoldier, INT8 bDirection, INT32 sGridNo, INT8 b
|
||||
// OK, make guy go here...
|
||||
pSoldier->EVENT_GetNewSoldierPath( pSoldier->pathing.sFinalDestination, pSoldier->usUIMovementMode );
|
||||
// Restore final dest....
|
||||
MercPtrs[ ubPerson ]->pathing.sFinalDestination = sTempDestGridNo;
|
||||
ubPerson->pathing.sFinalDestination = sTempDestGridNo;
|
||||
pSoldier->flags.fBlockedByAnotherMerc = FALSE;
|
||||
|
||||
// Is the next tile blocked too?
|
||||
@@ -288,18 +285,18 @@ INT8 TileIsClear( SOLDIERTYPE *pSoldier, INT8 bDirection, INT32 sGridNo, INT8 b
|
||||
|
||||
|
||||
// Swap now!
|
||||
MercPtrs[ ubPerson ]->flags.fBlockedByAnotherMerc = FALSE;
|
||||
ubPerson->flags.fBlockedByAnotherMerc = FALSE;
|
||||
|
||||
// Restore final dest....
|
||||
MercPtrs[ ubPerson ]->pathing.sFinalDestination = sTempDestGridNo;
|
||||
ubPerson->pathing.sFinalDestination = sTempDestGridNo;
|
||||
|
||||
// Swap merc positions.....
|
||||
SwapMercPositions( pSoldier, MercPtrs[ ubPerson ] );
|
||||
SwapMercPositions( pSoldier, ubPerson );
|
||||
|
||||
// With these two guys swapped, they should try and continue on their way....
|
||||
// Start them both again along their way...
|
||||
pSoldier->EVENT_GetNewSoldierPath( pSoldier->pathing.sFinalDestination, pSoldier->usUIMovementMode );
|
||||
MercPtrs[ ubPerson ]->EVENT_GetNewSoldierPath( MercPtrs[ ubPerson ]->pathing.sFinalDestination, MercPtrs[ ubPerson ]->usUIMovementMode );
|
||||
ubPerson->EVENT_GetNewSoldierPath( ubPerson->pathing.sFinalDestination, ubPerson->usUIMovementMode );
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -311,14 +308,14 @@ INT8 TileIsClear( SOLDIERTYPE *pSoldier, INT8 bDirection, INT32 sGridNo, INT8 b
|
||||
//return( MOVE_TILE_STATIONARY_BLOCKED );
|
||||
// ATE: OK, put some smartshere...
|
||||
// If we are waiting for more than a few times, change to stationary...
|
||||
if ( MercPtrs[ ubPerson ]->flags.fDelayedMovement >= 105 )
|
||||
if ( ubPerson->flags.fDelayedMovement >= 105 )
|
||||
{
|
||||
// Set to special 'I want to walk through people' value
|
||||
pSoldier->flags.fDelayedMovement = 150;
|
||||
|
||||
return( MOVE_TILE_STATIONARY_BLOCKED );
|
||||
}
|
||||
if ( MercPtrs[ ubPerson ]->sGridNo == MercPtrs[ ubPerson ]->pathing.sFinalDestination )
|
||||
if ( ubPerson->sGridNo == ubPerson->pathing.sFinalDestination )
|
||||
{
|
||||
return( MOVE_TILE_STATIONARY_BLOCKED );
|
||||
}
|
||||
@@ -495,11 +492,11 @@ BOOLEAN HandleNextTile( SOLDIERTYPE *pSoldier, INT8 bDirection, INT32 sGridNo, I
|
||||
BOOLEAN HandleNextTileWaiting( SOLDIERTYPE *pSoldier )
|
||||
{
|
||||
// Buddy is waiting to continue his path
|
||||
INT8 bBlocked, bPathBlocked;
|
||||
INT8 bBlocked, bPathBlocked;
|
||||
INT32 sCost;
|
||||
INT32 sNewGridNo, sCheckGridNo;
|
||||
INT32 sNewGridNo, sCheckGridNo;
|
||||
UINT8 ubDirection, bCauseDirection;
|
||||
UINT16 ubPerson;
|
||||
SoldierID ubPerson;
|
||||
UINT8 fFlags = 0;
|
||||
|
||||
|
||||
@@ -659,16 +656,16 @@ BOOLEAN HandleNextTileWaiting( SOLDIERTYPE *pSoldier )
|
||||
ubPerson = WhoIsThere2( pSoldier->sDelayedMovementCauseGridNo, pSoldier->pathing.bLevel );
|
||||
|
||||
// if either on a mission from god, or two AI guys not on stationary...
|
||||
if ( ubPerson != NOBODY && ( pSoldier->ubQuoteRecord != 0 || ( pSoldier->bTeam != gbPlayerNum && pSoldier->aiData.bOrders != STATIONARY && MercPtrs[ ubPerson ]->bTeam != gbPlayerNum && MercPtrs[ ubPerson ]->aiData.bOrders != STATIONARY ) || (pSoldier->bTeam == gbPlayerNum && gTacticalStatus.fAutoBandageMode && !(MercPtrs[ ubPerson ]->bTeam == CIV_TEAM && MercPtrs[ ubPerson ]->aiData.bOrders == STATIONARY ) ) ) )
|
||||
if ( ubPerson != NOBODY && ( pSoldier->ubQuoteRecord != 0 || ( pSoldier->bTeam != gbPlayerNum && pSoldier->aiData.bOrders != STATIONARY && ubPerson->bTeam != gbPlayerNum && ubPerson->aiData.bOrders != STATIONARY ) || (pSoldier->bTeam == gbPlayerNum && gTacticalStatus.fAutoBandageMode && !(ubPerson->bTeam == CIV_TEAM && ubPerson->aiData.bOrders == STATIONARY ) ) ) )
|
||||
{
|
||||
// Swap now!
|
||||
//MercPtrs[ ubPerson ]->flags.fBlockedByAnotherMerc = FALSE;
|
||||
//ubPerson->flags.fBlockedByAnotherMerc = FALSE;
|
||||
|
||||
// Restore final dest....
|
||||
//MercPtrs[ ubPerson ]->pathing.sFinalDestination = sTempDestGridNo;
|
||||
//ubPerson->pathing.sFinalDestination = sTempDestGridNo;
|
||||
|
||||
// Swap merc positions.....
|
||||
SwapMercPositions( pSoldier, MercPtrs[ ubPerson ] );
|
||||
SwapMercPositions( pSoldier, ubPerson );
|
||||
|
||||
// With these two guys swapped, we should try to continue on our way....
|
||||
pSoldier->flags.fDelayedMovement = FALSE;
|
||||
@@ -693,7 +690,7 @@ BOOLEAN HandleNextTileWaiting( SOLDIERTYPE *pSoldier )
|
||||
pSoldier->pathing.bPathStored = TRUE;
|
||||
|
||||
pSoldier->EVENT_GetNewSoldierPath( pSoldier->sAbsoluteFinalDestination, pSoldier->usUIMovementMode );
|
||||
//EVENT_GetNewSoldierPath( MercPtrs[ ubPerson ], MercPtrs[ ubPerson ]->pathing.sFinalDestination, MercPtrs[ ubPerson ]->usUIMovementMode );
|
||||
//EVENT_GetNewSoldierPath( ubPerson, ubPerson->pathing.sFinalDestination, ubPerson->usUIMovementMode );
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
+4
-7
@@ -995,16 +995,13 @@ void RebuildCurrentSquad( void )
|
||||
|
||||
void ExamineCurrentSquadLights( void )
|
||||
{
|
||||
// rebuilds current squad to reset faces in tactical
|
||||
UINT16 ubLoop;
|
||||
|
||||
// OK, we should add lights for any guy currently bInSector who is not bad OKLIFE...
|
||||
ubLoop = gTacticalStatus.Team[ gbPlayerNum ].bFirstID;
|
||||
for ( ; ubLoop <= gTacticalStatus.Team[ gbPlayerNum ].bLastID; ubLoop++)
|
||||
SoldierID usID = gTacticalStatus.Team[ gbPlayerNum ].bFirstID;
|
||||
for ( ; usID <= gTacticalStatus.Team[ gbPlayerNum ].bLastID; ++usID)
|
||||
{
|
||||
if ( MercPtrs[ ubLoop ]->bInSector && MercPtrs[ ubLoop ]->stats.bLife >= OKLIFE )
|
||||
if ( usID->bInSector && usID->stats.bLife >= OKLIFE )
|
||||
{
|
||||
MercPtrs[ ubLoop ]->PositionSoldierLight( );
|
||||
usID->PositionSoldierLight( );
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -119,7 +119,6 @@ BOOLEAN InternalInitSectorExitMenu( UINT8 ubDirection, INT32 sAdditionalData )//
|
||||
{
|
||||
UINT32 uiTraverseTimeInMinutes;
|
||||
SOLDIERTYPE *pSoldier;
|
||||
INT32 i;
|
||||
SGPRect aRect;
|
||||
UINT16 usTextBoxWidth, usTextBoxHeight;
|
||||
INT32 usMapPos = 0;
|
||||
@@ -189,10 +188,10 @@ BOOLEAN InternalInitSectorExitMenu( UINT8 ubDirection, INT32 sAdditionalData )//
|
||||
|
||||
if ( gTacticalStatus.uiFlags & INCOMBAT )
|
||||
{
|
||||
INT32 i, cnt = 0;
|
||||
for( i = gTacticalStatus.Team[ OUR_TEAM ].bFirstID; i <= gTacticalStatus.Team[ OUR_TEAM ].bLastID; i++ )
|
||||
INT32 cnt = 0;
|
||||
for( SoldierID id = gTacticalStatus.Team[ OUR_TEAM ].bFirstID; id <= gTacticalStatus.Team[ OUR_TEAM ].bLastID; ++id )
|
||||
{
|
||||
if( OK_INSECTOR_MERC( MercPtrs[ i ] ) )
|
||||
if( OK_INSECTOR_MERC( id ) )
|
||||
cnt++;
|
||||
}
|
||||
if( cnt != 1 )
|
||||
@@ -220,13 +219,14 @@ BOOLEAN InternalInitSectorExitMenu( UINT8 ubDirection, INT32 sAdditionalData )//
|
||||
gExitDialog.ubNumPeopleOnSquad = NumberOfPlayerControllableMercsInSquad( gusSelectedSoldier->bAssignment );
|
||||
|
||||
//Determine
|
||||
for( i = gTacticalStatus.Team[ OUR_TEAM ].bFirstID; i <= gTacticalStatus.Team[ OUR_TEAM ].bLastID; i++ )
|
||||
for( SoldierID id = gTacticalStatus.Team[ OUR_TEAM ].bFirstID; id <= gTacticalStatus.Team[ OUR_TEAM ].bLastID; ++id )
|
||||
{
|
||||
pSoldier = MercPtrs[ i ];
|
||||
if( i == gusSelectedSoldier )
|
||||
if( id == gusSelectedSoldier )
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
pSoldier = id;
|
||||
if( !pSoldier->flags.fBetweenSectors &&
|
||||
pSoldier->sSectorX == gWorldSectorX && pSoldier->sSectorY == gWorldSectorY && pSoldier->bSectorZ == gbWorldSectorZ &&
|
||||
pSoldier->stats.bLife >= OKLIFE &&
|
||||
@@ -262,21 +262,21 @@ BOOLEAN InternalInitSectorExitMenu( UINT8 ubDirection, INT32 sAdditionalData )//
|
||||
//Assuming that the matching squad assignment is in the same sector.
|
||||
UINT16 ubNumMercs = 1; //selected soldier is a merc
|
||||
UINT16 ubNumEPCs = 0;
|
||||
for( i = gTacticalStatus.Team[ OUR_TEAM ].bFirstID; i <= gTacticalStatus.Team[ OUR_TEAM ].bLastID; i++ )
|
||||
for( SoldierID id = gTacticalStatus.Team[ OUR_TEAM ].bFirstID; id <= gTacticalStatus.Team[ OUR_TEAM ].bLastID; ++id )
|
||||
{
|
||||
if( i == gusSelectedSoldier )
|
||||
if( id == gusSelectedSoldier )
|
||||
{
|
||||
continue;
|
||||
}
|
||||
if( MercPtrs[ i ]->bAssignment == gusSelectedSoldier->bAssignment )
|
||||
if( id->bAssignment == gusSelectedSoldier->bAssignment )
|
||||
{
|
||||
if( AM_AN_EPC( MercPtrs[ i ] ) )
|
||||
if( AM_AN_EPC( id ) )
|
||||
{
|
||||
ubNumEPCs++;
|
||||
//record the slot of the epc. If there are more than one EPCs, then
|
||||
//it doesn't matter. This is used in building the text message explaining
|
||||
//why the selected merc can't leave. This is how we extract the EPC's name.
|
||||
gExitDialog.bSingleMoveWillIsolateEPC = (INT16)i;
|
||||
gExitDialog.bSingleMoveWillIsolateEPC = id;
|
||||
}
|
||||
else
|
||||
{ //We have more than one merc, so we will allow the selected merc to leave alone if
|
||||
|
||||
@@ -2556,11 +2556,13 @@ BOOLEAN SetSectorFlag( INT16 sMapX, INT16 sMapY, UINT8 bMapZ, UINT32 uiFlagToSet
|
||||
|
||||
for ( UINT16 i = gTacticalStatus.Team[ gbPlayerNum ].bFirstID; i <= gTacticalStatus.Team[ gbPlayerNum ].bLastID; i++ )
|
||||
{
|
||||
if( MercPtrs[ i ]->bActive && MercPtrs[ i ]->stats.bLife && !(MercPtrs[ i ]->flags.uiStatusFlags & SOLDIER_VEHICLE) && MercPtrs[ i ]->ubProfile != NO_PROFILE &&
|
||||
MercPtrs[ i ]->sSectorX == sMapX && MercPtrs[ i ]->sSectorY == sMapY && MercPtrs[ i ]->bSectorZ == bMapZ && !MercPtrs[ i ]->flags.fBetweenSectors &&
|
||||
MercPtrs[ i ]->bAssignment != IN_TRANSIT && MercPtrs[ i ]->bAssignment != ASSIGNMENT_DEAD )
|
||||
SOLDIERTYPE *pSoldier = MercPtrs[i];
|
||||
|
||||
if( pSoldier->bActive && pSoldier->stats.bLife && !(pSoldier->flags.uiStatusFlags & SOLDIER_VEHICLE) && pSoldier->ubProfile != NO_PROFILE &&
|
||||
pSoldier->sSectorX == sMapX && pSoldier->sSectorY == sMapY && pSoldier->bSectorZ == bMapZ && !pSoldier->flags.fBetweenSectors &&
|
||||
pSoldier->bAssignment != IN_TRANSIT && pSoldier->bAssignment != ASSIGNMENT_DEAD )
|
||||
{
|
||||
gMercProfiles[ MercPtrs[ i ]->ubProfile ].records.usSectorsDiscovered++;
|
||||
gMercProfiles[ pSoldier->ubProfile ].records.usSectorsDiscovered++;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
+10
-9
@@ -506,7 +506,7 @@ void BeginTeamTurn( UINT8 ubTeam )
|
||||
{
|
||||
DebugMsg (TOPIC_JA2INTERRUPT,DBG_LEVEL_3,"BeginTeamTurn");
|
||||
INT32 cnt;
|
||||
UINT16 ubID;
|
||||
SoldierID ubID;
|
||||
SOLDIERTYPE *pSoldier;
|
||||
|
||||
//rain
|
||||
@@ -657,7 +657,7 @@ void BeginTeamTurn( UINT8 ubTeam )
|
||||
{
|
||||
AddTopMessage( COMPUTER_TURN_MESSAGE, TeamTurnString[ ubTeam ] );
|
||||
}
|
||||
StartNPCAI( MercPtrs[ ubID ] );
|
||||
StartNPCAI( ubID );
|
||||
/*if(is_server && !net_turn) send_EndTurn(ubTeam);
|
||||
if(net_turn == true) net_turn = false;*/
|
||||
if(is_server) send_EndTurn(ubTeam);
|
||||
@@ -983,22 +983,23 @@ void StartInterrupt( void )
|
||||
// report any close call quotes for us here
|
||||
for ( iCounter = gTacticalStatus.Team[ gbPlayerNum ].bFirstID; iCounter <= gTacticalStatus.Team[ gbPlayerNum ].bLastID; iCounter++ )
|
||||
{
|
||||
if ( OK_INSECTOR_MERC( MercPtrs[ iCounter ] ) )
|
||||
SOLDIERTYPE *pSoldier = MercPtrs[iCounter];
|
||||
|
||||
if ( OK_INSECTOR_MERC( pSoldier ) )
|
||||
{
|
||||
if ( MercPtrs[ iCounter ]->flags.fCloseCall )
|
||||
if ( pSoldier->flags.fCloseCall )
|
||||
{
|
||||
if ( MercPtrs[ iCounter ]->bNumHitsThisTurn == 0 && !(MercPtrs[ iCounter ]->usQuoteSaidExtFlags & SOLDIER_QUOTE_SAID_EXT_CLOSE_CALL) && Random( 3 ) == 0 )
|
||||
if ( pSoldier->bNumHitsThisTurn == 0 && !(pSoldier->usQuoteSaidExtFlags & SOLDIER_QUOTE_SAID_EXT_CLOSE_CALL) && Random( 3 ) == 0 )
|
||||
{
|
||||
// say close call quote!
|
||||
TacticalCharacterDialogue( MercPtrs[ iCounter ], QUOTE_CLOSE_CALL );
|
||||
MercPtrs[ iCounter ]->usQuoteSaidExtFlags |= SOLDIER_QUOTE_SAID_EXT_CLOSE_CALL;
|
||||
TacticalCharacterDialogue( pSoldier, QUOTE_CLOSE_CALL );
|
||||
pSoldier->usQuoteSaidExtFlags |= SOLDIER_QUOTE_SAID_EXT_CLOSE_CALL;
|
||||
}
|
||||
MercPtrs[ iCounter ]->flags.fCloseCall = FALSE;
|
||||
pSoldier->flags.fCloseCall = FALSE;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
else
|
||||
{
|
||||
|
||||
@@ -4890,12 +4890,12 @@ BOOLEAN HandleCheckForExitArrowsInput( BOOLEAN fAdjustConfirm )
|
||||
if( gMercProfiles[ gusSelectedSoldier->ubProfile ].bSex == MALE )
|
||||
{ //male singular
|
||||
swprintf( str, pExitingSectorHelpText[ EXIT_GUI_MERC_CANT_ISOLATE_EPC_HELPTEXT_MALE_SINGULAR ], gusSelectedSoldier->GetName(),
|
||||
MercPtrs[ gbPotentiallyAbandonedEPCSlotID ]->GetName() );
|
||||
gbPotentiallyAbandonedEPCSlotID->GetName() );
|
||||
}
|
||||
else
|
||||
{ //female singular
|
||||
swprintf( str, pExitingSectorHelpText[ EXIT_GUI_MERC_CANT_ISOLATE_EPC_HELPTEXT_FEMALE_SINGULAR ], gusSelectedSoldier->GetName(),
|
||||
MercPtrs[ gbPotentiallyAbandonedEPCSlotID ]->GetName() );
|
||||
gbPotentiallyAbandonedEPCSlotID->GetName() );
|
||||
}
|
||||
}
|
||||
else
|
||||
|
||||
@@ -3151,7 +3151,7 @@ void UpdatePublic(UINT8 ubTeam, SoldierID ubID, INT8 bNewOpplist, INT32 sGridNo,
|
||||
// if soldier isn't aware of guynum, give him another chance to see
|
||||
if (pSoldier->aiData.bOppList[ubID] == NOT_HEARD_OR_SEEN)
|
||||
{
|
||||
if (ManLooksForMan(pSoldier,MercPtrs[ubID],UPDATEPUBLIC))
|
||||
if ( ManLooksForMan( pSoldier, ubID, UPDATEPUBLIC ) )
|
||||
// then he actually saw guynum because of our new public knowledge
|
||||
ubMadeDifference = TRUE;
|
||||
|
||||
@@ -7624,16 +7624,17 @@ INT8 GetHighestWatchedLocPoints( UINT16 ubID )
|
||||
}
|
||||
|
||||
|
||||
void CommunicateWatchedLoc( UINT16 ubID, INT32 sGridNo, INT8 bLevel, UINT8 ubPoints )
|
||||
void CommunicateWatchedLoc( SoldierID ubID, INT32 sGridNo, INT8 bLevel, UINT8 ubPoints )
|
||||
{
|
||||
UINT16 ubLoop;
|
||||
INT8 bTeam, bLoopPoint, bPoint;
|
||||
|
||||
bTeam = MercPtrs[ ubID ]->bTeam;
|
||||
bTeam = ubID->bTeam;
|
||||
|
||||
for ( ubLoop = gTacticalStatus.Team[ bTeam ].bFirstID; ubLoop <= gTacticalStatus.Team[ bTeam ].bLastID; ubLoop++ )
|
||||
{
|
||||
if ( ubLoop == ubID || MercPtrs[ ubLoop ]->bActive == FALSE || MercPtrs[ ubLoop ]->bInSector == FALSE || MercPtrs[ ubLoop ]->stats.bLife < OKLIFE )
|
||||
SOLDIERTYPE *pSoldier = MercPtrs[ubLoop];
|
||||
if ( ubLoop == ubID || pSoldier->bActive == FALSE || pSoldier->bInSector == FALSE || pSoldier->stats.bLife < OKLIFE )
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user