Use SoldierID

This commit is contained in:
Asdow
2024-12-01 18:23:52 +02:00
parent e59d915e58
commit bfb724eab9
36 changed files with 1165 additions and 1162 deletions
+9 -8
View File
@@ -3719,26 +3719,27 @@ void OutOfStockMessageBoxCallBack( UINT8 bExitValue )
UINT8 CheckPlayersInventoryForGunMatchingGivenAmmoID( INT16 sItemID ) UINT8 CheckPlayersInventoryForGunMatchingGivenAmmoID( INT16 sItemID )
{ {
UINT8 ubItemCount=0; UINT8 ubItemCount=0;
UINT16 ubMercCount;
UINT8 ubPocketCount; UINT8 ubPocketCount;
UINT16 ubFirstID = gTacticalStatus.Team[ OUR_TEAM ].bFirstID; SoldierID id;
UINT16 ubLastID = gTacticalStatus.Team[ OUR_TEAM ].bLastID; SoldierID ubFirstID = gTacticalStatus.Team[ OUR_TEAM ].bFirstID;
SoldierID ubLastID = gTacticalStatus.Team[ OUR_TEAM ].bLastID;
//loop through all the mercs on the team //loop through all the mercs on the team
for( ubMercCount = ubFirstID; ubMercCount <= ubLastID; ++ubMercCount ) for( id = ubFirstID; id <= ubLastID; ++id )
{ {
if( Menptr[ ubMercCount ].bActive ) SOLDIERTYPE *pSoldier = id;
if( pSoldier->bActive )
{ {
//loop through all the pockets on the merc //loop through all the pockets on the merc
UINT8 invsize = Menptr[ ubMercCount ].inv.size(); UINT8 invsize = pSoldier->inv.size();
for( ubPocketCount=0; ubPocketCount<invsize; ++ubPocketCount) for( ubPocketCount=0; ubPocketCount<invsize; ++ubPocketCount)
{ {
//if there is a weapon here //if there is a weapon here
if( Item[ Menptr[ ubMercCount ].inv[ ubPocketCount ].usItem ].usItemClass == IC_GUN ) if( Item[ pSoldier->inv[ ubPocketCount ].usItem ].usItemClass == IC_GUN )
{ {
//if the weapon uses the same kind of ammo as the one passed in, return true //if the weapon uses the same kind of ammo as the one passed in, return true
if( Weapon[ Menptr[ ubMercCount ].inv[ ubPocketCount ].usItem ].ubCalibre == Magazine[ Item[ sItemID ].ubClassIndex ].ubCalibre ) if( Weapon[ pSoldier->inv[ ubPocketCount ].usItem ].ubCalibre == Magazine[ Item[ sItemID ].ubClassIndex ].ubCalibre )
{ {
++ubItemCount; ++ubItemCount;
} }
+6 -7
View File
@@ -4102,7 +4102,6 @@ void recieveMISS (RPCParameters *rpcParameters)
BOOLEAN check_status (void)// any 'enemies' and clients left to fight ?? BOOLEAN check_status (void)// any 'enemies' and clients left to fight ??
{ {
SOLDIERTYPE *pSoldier; SOLDIERTYPE *pSoldier;
int cnt;
int soldiers= 0 ; int soldiers= 0 ;
int numActiveSides = 0; int numActiveSides = 0;
@@ -4112,9 +4111,9 @@ BOOLEAN check_status (void)// any 'enemies' and clients left to fight ??
{ {
soldiers=0; soldiers=0;
for(cnt = gTacticalStatus.Team[ x ].bFirstID;cnt <= gTacticalStatus.Team[ x ].bLastID; cnt++) for( SoldierID cnt = gTacticalStatus.Team[ x ].bFirstID;cnt <= gTacticalStatus.Team[ x ].bLastID; ++cnt)
{ {
pSoldier = MercPtrs[ cnt ]; pSoldier = cnt;
if(pSoldier->stats.bLife >= OKLIFE && pSoldier->bActive && pSoldier->bInSector) if(pSoldier->stats.bLife >= OKLIFE && pSoldier->bActive && pSoldier->bInSector)
{ {
soldiers++; soldiers++;
@@ -4331,14 +4330,14 @@ void null_team (RPCParameters *rpcParameters)
{ {
kickR* kick = (kickR*)rpcParameters->input; kickR* kick = (kickR*)rpcParameters->input;
ScreenMsg( FONT_LTGREEN, MSG_INTERFACE, MPClientMessage[29],(kick->ubResult-5),client_names[kick->ubResult-6] ); ScreenMsg( FONT_LTGREEN, MSG_INTERFACE, MPClientMessage[29],(kick->ubResult-5),client_names[kick->ubResult-6] );
int fID = gTacticalStatus.Team[ kick->ubResult ].bFirstID; SoldierID fID = gTacticalStatus.Team[ kick->ubResult ].bFirstID;
int lID = gTacticalStatus.Team[ kick->ubResult ].bLastID; SoldierID lID = gTacticalStatus.Team[ kick->ubResult ].bLastID;
if(kick->ubResult==netbTeam) if(kick->ubResult==netbTeam)
fID=0,lID=19; fID=0,lID=19;
int cnt; SoldierID cnt;
for ( cnt=fID ; cnt <= lID; cnt++ ) for ( cnt=fID ; cnt <= lID; ++cnt )
{ {
TacticalRemoveSoldier( cnt ); TacticalRemoveSoldier( cnt );
} }
+2 -2
View File
@@ -1713,9 +1713,9 @@ void GiveQuestRewardPoint( INT16 sQuestSectorX, INT16 sQuestsSectorY, INT8 bExpR
{ {
ScreenMsg( FONT_MCOLOR_LTBLUE, MSG_TESTVERSION, L"QUEST COMPLETED - Adding to merc records and awarding experiences (%d).", (bExpReward * gGameExternalOptions.usAwardSpecialExpForQuests) ); ScreenMsg( FONT_MCOLOR_LTBLUE, MSG_TESTVERSION, L"QUEST COMPLETED - Adding to merc records and awarding experiences (%d).", (bExpReward * gGameExternalOptions.usAwardSpecialExpForQuests) );
for ( SoldierID i = gTacticalStatus.Team[ gbPlayerNum ].bFirstID; i <= gTacticalStatus.Team[ gbPlayerNum ].bLastID; ++i ) for ( SoldierID id = gTacticalStatus.Team[ gbPlayerNum ].bFirstID; id <= gTacticalStatus.Team[ gbPlayerNum ].bLastID; ++id )
{ {
SOLDIERTYPE *pSoldier = i; SOLDIERTYPE *pSoldier = id;
if( pSoldier->bActive && pSoldier->stats.bLife >= CONSCIOUSNESS && !(pSoldier->flags.uiStatusFlags & SOLDIER_VEHICLE) && pSoldier->ubProfile != NO_PROFILE && 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->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 ) pSoldier->bAssignment != IN_TRANSIT && pSoldier->bAssignment != ASSIGNMENT_DEAD && gMercProfiles[ pSoldier->ubProfile ].ubBodyType != 21 ) // != ROBOTNOWEAPON )
+4 -4
View File
@@ -185,7 +185,7 @@ void StrategicHandlePlayerTeamMercDeath( SOLDIERTYPE *pSoldier )
void MercDailyUpdate() void MercDailyUpdate()
{ {
SoldierID id; SoldierID id;
SoldierID bLastTeamID; SoldierID lastid;
SOLDIERTYPE *pSoldier; SOLDIERTYPE *pSoldier;
//SOLDIERTYPE *pQuitList[ 21 ]; //SOLDIERTYPE *pQuitList[ 21 ];
MERCPROFILESTRUCT *pProfile; MERCPROFILESTRUCT *pProfile;
@@ -218,10 +218,10 @@ void MercDailyUpdate()
AddSameDayStrategicEvent( EVENT_BEGIN_CONTRACT_RENEWAL_SEQUENCE, MERC_ARRIVE_TIME_SLOT_3, 0 ); AddSameDayStrategicEvent( EVENT_BEGIN_CONTRACT_RENEWAL_SEQUENCE, MERC_ARRIVE_TIME_SLOT_3, 0 );
id = gTacticalStatus.Team[ gbPlayerNum ].bFirstID; id = gTacticalStatus.Team[ gbPlayerNum ].bFirstID;
bLastTeamID = gTacticalStatus.Team[ gbPlayerNum ].bLastID; lastid = gTacticalStatus.Team[ gbPlayerNum ].bLastID;
//loop though all the mercs //loop though all the mercs
for ( ; id <= bLastTeamID; ++id) for ( ; id <= lastid; ++id)
{ {
pSoldier = id; pSoldier = id;
//if the merc is active //if the merc is active
@@ -376,7 +376,7 @@ void MercDailyUpdate()
} }
//reset the counter //reset the counter
for ( id = 0; id <= bLastTeamID; ++id ) for ( id = 0; id <= lastid; ++id )
{ {
pSoldier = id; pSoldier = id;
//if the merc is active //if the merc is active
+64 -52
View File
@@ -728,9 +728,9 @@ void HandleMoraleEventForSoldier( SOLDIERTYPE * pSoldier, INT8 bMoraleEvent )
void HandleMoraleEvent( SOLDIERTYPE *pSoldier, INT8 bMoraleEvent, INT16 sMapX, INT16 sMapY, INT8 bMapZ ) void HandleMoraleEvent( SOLDIERTYPE *pSoldier, INT8 bMoraleEvent, INT16 sMapX, INT16 sMapY, INT8 bMapZ )
{ {
UINT16 ubLoop; SoldierID id;
SOLDIERTYPE * pTeamSoldier; SOLDIERTYPE *pTeamSoldier;
MERCPROFILESTRUCT * pProfile; MERCPROFILESTRUCT *pProfile;
gfSomeoneSaidMoraleQuote = FALSE; gfSomeoneSaidMoraleQuote = FALSE;
@@ -778,9 +778,10 @@ void HandleMoraleEvent( SOLDIERTYPE *pSoldier, INT8 bMoraleEvent, INT16 sMapX, I
case MORALE_BATTLE_WON: case MORALE_BATTLE_WON:
// affects everyone to varying degrees // affects everyone to varying degrees
ubLoop = gTacticalStatus.Team[ gbPlayerNum ].bFirstID; id = gTacticalStatus.Team[ gbPlayerNum ].bFirstID;
for ( pTeamSoldier = MercPtrs[ ubLoop ]; ubLoop <= gTacticalStatus.Team[ gbPlayerNum ].bLastID; ubLoop++, pTeamSoldier++ ) for ( ; id <= gTacticalStatus.Team[ gbPlayerNum ].bLastID; ++id )
{ {
pTeamSoldier = id;
if ( pTeamSoldier->bActive ) if ( pTeamSoldier->bActive )
{ {
if ( SOLDIER_IN_SECTOR( pTeamSoldier, sMapX, sMapY, bMapZ ) ) if ( SOLDIER_IN_SECTOR( pTeamSoldier, sMapX, sMapY, bMapZ ) )
@@ -797,9 +798,10 @@ void HandleMoraleEvent( SOLDIERTYPE *pSoldier, INT8 bMoraleEvent, INT16 sMapX, I
break; break;
case MORALE_RAN_AWAY: case MORALE_RAN_AWAY:
// affects everyone to varying degrees // affects everyone to varying degrees
ubLoop = gTacticalStatus.Team[ gbPlayerNum ].bFirstID; id = gTacticalStatus.Team[ gbPlayerNum ].bFirstID;
for ( pTeamSoldier = MercPtrs[ ubLoop ]; ubLoop <= gTacticalStatus.Team[ gbPlayerNum ].bLastID; ubLoop++, pTeamSoldier++ ) for ( ; id <= gTacticalStatus.Team[ gbPlayerNum ].bLastID; ++id )
{ {
pTeamSoldier = id;
if ( pTeamSoldier->bActive ) if ( pTeamSoldier->bActive )
{ {
// CJC: adding to SOLDIER_IN_SECTOR check special stuff because the old sector values might // CJC: adding to SOLDIER_IN_SECTOR check special stuff because the old sector values might
@@ -869,9 +871,10 @@ void HandleMoraleEvent( SOLDIERTYPE *pSoldier, INT8 bMoraleEvent, INT16 sMapX, I
case MORALE_MONSTER_QUEEN_KILLED: case MORALE_MONSTER_QUEEN_KILLED:
case MORALE_DEIDRANNA_KILLED: case MORALE_DEIDRANNA_KILLED:
// affects everyone, everywhere // affects everyone, everywhere
ubLoop = gTacticalStatus.Team[ gbPlayerNum ].bFirstID; id = gTacticalStatus.Team[gbPlayerNum].bFirstID;
for ( pTeamSoldier = MercPtrs[ ubLoop ]; ubLoop <= gTacticalStatus.Team[ gbPlayerNum ].bLastID; ubLoop++, pTeamSoldier++ ) for ( ; id <= gTacticalStatus.Team[gbPlayerNum].bLastID; ++id )
{ {
pTeamSoldier = id;
if ( pTeamSoldier->bActive ) if ( pTeamSoldier->bActive )
{ {
if ( gGameOptions.fNewTraitSystem && bMoraleEvent != MORALE_DEIDRANNA_KILLED) if ( gGameOptions.fNewTraitSystem && bMoraleEvent != MORALE_DEIDRANNA_KILLED)
@@ -898,9 +901,10 @@ void HandleMoraleEvent( SOLDIERTYPE *pSoldier, INT8 bMoraleEvent, INT16 sMapX, I
case MORALE_GREAT_MORALE: case MORALE_GREAT_MORALE:
case MORALE_AIRSTRIKE: case MORALE_AIRSTRIKE:
// affects every in sector // affects every in sector
ubLoop = gTacticalStatus.Team[ gbPlayerNum ].bFirstID; id = gTacticalStatus.Team[gbPlayerNum].bFirstID;
for ( pTeamSoldier = MercPtrs[ ubLoop ]; ubLoop <= gTacticalStatus.Team[ gbPlayerNum ].bLastID; ubLoop++, pTeamSoldier++ ) for ( ; id <= gTacticalStatus.Team[gbPlayerNum].bLastID; ++id )
{ {
pTeamSoldier = id;
if ( pTeamSoldier->bActive && SOLDIER_IN_SECTOR( pTeamSoldier, sMapX, sMapY, bMapZ ) ) if ( pTeamSoldier->bActive && SOLDIER_IN_SECTOR( pTeamSoldier, sMapX, sMapY, bMapZ ) )
{ {
HandleMoraleEventForSoldier( pTeamSoldier, bMoraleEvent ); HandleMoraleEventForSoldier( pTeamSoldier, bMoraleEvent );
@@ -913,9 +917,10 @@ void HandleMoraleEvent( SOLDIERTYPE *pSoldier, INT8 bMoraleEvent, INT16 sMapX, I
Assert( pSoldier ); Assert( pSoldier );
// affects everyone // affects everyone
ubLoop = gTacticalStatus.Team[ gbPlayerNum ].bFirstID; id = gTacticalStatus.Team[gbPlayerNum].bFirstID;
for ( pTeamSoldier = MercPtrs[ ubLoop ]; ubLoop <= gTacticalStatus.Team[ gbPlayerNum ].bLastID; ubLoop++, pTeamSoldier++ ) for ( ; id <= gTacticalStatus.Team[gbPlayerNum].bLastID; ++id )
{ {
pTeamSoldier = id;
if ( pTeamSoldier->bActive ) if ( pTeamSoldier->bActive )
{ {
HandleMoraleEventForSoldier( pTeamSoldier, bMoraleEvent ); HandleMoraleEventForSoldier( pTeamSoldier, bMoraleEvent );
@@ -927,9 +932,10 @@ void HandleMoraleEvent( SOLDIERTYPE *pSoldier, INT8 bMoraleEvent, INT16 sMapX, I
Assert( pSoldier ); Assert( pSoldier );
// affects everyone, in sector differently than not, extra bonuses if it's a buddy or hated merc // affects everyone, in sector differently than not, extra bonuses if it's a buddy or hated merc
ubLoop = gTacticalStatus.Team[ gbPlayerNum ].bFirstID; id = gTacticalStatus.Team[gbPlayerNum].bFirstID;
for ( pTeamSoldier = MercPtrs[ ubLoop ]; ubLoop <= gTacticalStatus.Team[ gbPlayerNum ].bLastID; ubLoop++, pTeamSoldier++ ) for ( ; id <= gTacticalStatus.Team[gbPlayerNum].bLastID; ++id )
{ {
pTeamSoldier = id;
if ( pTeamSoldier->bActive && pTeamSoldier->ubProfile != NO_PROFILE) if ( pTeamSoldier->bActive && pTeamSoldier->ubProfile != NO_PROFILE)
{ {
pProfile = &(gMercProfiles[ pTeamSoldier->ubProfile ]); pProfile = &(gMercProfiles[ pTeamSoldier->ubProfile ]);
@@ -982,9 +988,10 @@ void HandleMoraleEvent( SOLDIERTYPE *pSoldier, INT8 bMoraleEvent, INT16 sMapX, I
// female mercs get unhappy based on how sexist they are (=hate men) // female mercs get unhappy based on how sexist they are (=hate men)
// gentlemen males get unhappy too // gentlemen males get unhappy too
ubLoop = gTacticalStatus.Team[ gbPlayerNum ].bFirstID; id = gTacticalStatus.Team[gbPlayerNum].bFirstID;
for ( pTeamSoldier = MercPtrs[ ubLoop ]; ubLoop <= gTacticalStatus.Team[ gbPlayerNum ].bLastID; ubLoop++, pTeamSoldier++ ) for ( ; id <= gTacticalStatus.Team[gbPlayerNum].bLastID; ++id )
{ {
pTeamSoldier = id;
if ( pTeamSoldier->bActive && pTeamSoldier->ubProfile != NO_PROFILE ) if ( pTeamSoldier->bActive && pTeamSoldier->ubProfile != NO_PROFILE )
{ {
if ( WhichHated( pTeamSoldier->ubProfile, pSoldier->ubProfile ) != -1 ) if ( WhichHated( pTeamSoldier->ubProfile, pSoldier->ubProfile ) != -1 )
@@ -1044,9 +1051,10 @@ void HandleMoraleEvent( SOLDIERTYPE *pSoldier, INT8 bMoraleEvent, INT16 sMapX, I
case MORALE_ENEMYGROUP_COWARD: case MORALE_ENEMYGROUP_COWARD:
// affects coward in sector // affects coward in sector
ubLoop = gTacticalStatus.Team[gbPlayerNum].bFirstID; id = gTacticalStatus.Team[gbPlayerNum].bFirstID;
for ( pTeamSoldier = MercPtrs[ubLoop]; ubLoop <= gTacticalStatus.Team[gbPlayerNum].bLastID; ubLoop++, pTeamSoldier++ ) for ( ; id <= gTacticalStatus.Team[gbPlayerNum].bLastID; ++id )
{ {
pTeamSoldier = id;
if ( pTeamSoldier->bActive && (pTeamSoldier->sSectorX == sMapX) && (pTeamSoldier->sSectorY == sMapY) && (pTeamSoldier->bSectorZ == bMapZ) ) if ( pTeamSoldier->bActive && (pTeamSoldier->sSectorX == sMapX) && (pTeamSoldier->sSectorY == sMapY) && (pTeamSoldier->bSectorZ == bMapZ) )
{ {
if ( DoesMercHavePersonality( pTeamSoldier, CHAR_TRAIT_COWARD ) ) if ( DoesMercHavePersonality( pTeamSoldier, CHAR_TRAIT_COWARD ) )
@@ -1142,27 +1150,28 @@ void HandleMoraleEvent( SOLDIERTYPE *pSoldier, INT8 bMoraleEvent, INT16 sMapX, I
void HourlyMoraleUpdate( void ) void HourlyMoraleUpdate( void )
{ {
UINT16 bMercID, bOtherID, bLastTeamID; SoldierID bMercID, bOtherID, bLastTeamID;
INT8 bActualTeamOpinion; INT8 bActualTeamOpinion;
INT8 bTeamMoraleModChange, bTeamMoraleModDiff; INT8 bTeamMoraleModChange, bTeamMoraleModDiff;
INT8 bOpinion=-1; INT8 bOpinion=-1;
INT32 iTotalOpinions; INT32 iTotalOpinions;
INT8 bNumTeamMembers; INT8 bNumTeamMembers;
INT8 bHighestTeamLeadership = 0; INT8 bHighestTeamLeadership = 0;
SOLDIERTYPE * pSoldier; SOLDIERTYPE *pSoldier;
SOLDIERTYPE * pOtherSoldier; SOLDIERTYPE *pOtherSoldier;
MERCPROFILESTRUCT * pProfile; MERCPROFILESTRUCT *pProfile;
BOOLEAN fSameGroupOnly; BOOLEAN fSameGroupOnly;
static INT8 bStrategicMoraleUpdateCounter = 0; static INT8 bStrategicMoraleUpdateCounter = 0;
BOOLEAN fFoundHated = FALSE; BOOLEAN fFoundHated = FALSE;
INT8 bHated; INT8 bHated;
bMercID = gTacticalStatus.Team[ gbPlayerNum ].bFirstID; bMercID = gTacticalStatus.Team[ gbPlayerNum ].bFirstID;
bLastTeamID = gTacticalStatus.Team[ gbPlayerNum ].bLastID; bLastTeamID = gTacticalStatus.Team[ gbPlayerNum ].bLastID;
// loop through all mercs to calculate their morale // loop through all mercs to calculate their morale
for ( pSoldier = MercPtrs[ bMercID ]; bMercID <= bLastTeamID; ++bMercID,pSoldier++) for ( ; bMercID <= bLastTeamID; ++bMercID )
{ {
pSoldier = bMercID;
//if the merc is active, in Arulco, and conscious, not POW //if the merc is active, in Arulco, and conscious, not POW
if ( pSoldier->bActive && pSoldier->ubProfile != NO_PROFILE && if ( pSoldier->bActive && pSoldier->ubProfile != NO_PROFILE &&
!(pSoldier->bAssignment == IN_TRANSIT || !(pSoldier->bAssignment == IN_TRANSIT ||
@@ -1194,8 +1203,9 @@ void HourlyMoraleUpdate( void )
// loop through all other mercs // loop through all other mercs
bOtherID = gTacticalStatus.Team[ gbPlayerNum ].bFirstID; bOtherID = gTacticalStatus.Team[ gbPlayerNum ].bFirstID;
for ( pOtherSoldier = MercPtrs[ bOtherID ]; bOtherID <= bLastTeamID; bOtherID++,pOtherSoldier++) for ( ; bOtherID <= bLastTeamID; ++bOtherID )
{ {
pOtherSoldier = bOtherID;
// skip past ourselves and all inactive mercs // skip past ourselves and all inactive mercs
if (bOtherID != bMercID && pOtherSoldier->bActive && pOtherSoldier->ubProfile != NO_PROFILE && if (bOtherID != bMercID && pOtherSoldier->bActive && pOtherSoldier->ubProfile != NO_PROFILE &&
!(pOtherSoldier->bAssignment == IN_TRANSIT || !(pOtherSoldier->bAssignment == IN_TRANSIT ||
@@ -1345,13 +1355,12 @@ void HourlyMoraleUpdate( void )
void HandleSnitchCheck( void ) void HandleSnitchCheck( void )
{ {
UINT16 bMercID, bOtherID; SoldierID bMercID, bOtherID, bLastTeamID;
INT8 bOpinion = -1; INT8 bOpinion = -1;
UINT16 bLastTeamID; SOLDIERTYPE *pSoldier;
SOLDIERTYPE* pSoldier; SOLDIERTYPE *pOtherSoldier;
SOLDIERTYPE* pOtherSoldier; MERCPROFILESTRUCT *pProfile;
MERCPROFILESTRUCT* pProfile; BOOLEAN fSameGroupOnly;
BOOLEAN fSameGroupOnly;
// anv: save merc id and his negative morale event for snitches // anv: save merc id and his negative morale event for snitches
std::vector<SnitchEvent> snitcheventvector; std::vector<SnitchEvent> snitcheventvector;
@@ -1359,8 +1368,9 @@ void HandleSnitchCheck( void )
bLastTeamID = gTacticalStatus.Team[gbPlayerNum].bLastID; bLastTeamID = gTacticalStatus.Team[gbPlayerNum].bLastID;
// loop through all mercs to calculate their morale // loop through all mercs to calculate their morale
for ( pSoldier = MercPtrs[bMercID]; bMercID <= bLastTeamID; ++bMercID, pSoldier++ ) for ( ; bMercID <= bLastTeamID; ++bMercID )
{ {
pSoldier = bMercID;
//if the merc is active, in Arulco, not POW, not a vehicle //if the merc is active, in Arulco, not POW, not a vehicle
if ( pSoldier && pSoldier->bActive && pSoldier->ubProfile != NO_PROFILE && if ( pSoldier && pSoldier->bActive && pSoldier->ubProfile != NO_PROFILE &&
!(pSoldier->bAssignment == IN_TRANSIT || !(pSoldier->bAssignment == IN_TRANSIT ||
@@ -1383,8 +1393,9 @@ void HandleSnitchCheck( void )
} }
// loop through all other mercs // loop through all other mercs
bOtherID = gTacticalStatus.Team[gbPlayerNum].bFirstID; bOtherID = gTacticalStatus.Team[gbPlayerNum].bFirstID;
for ( pOtherSoldier = MercPtrs[bOtherID]; bOtherID <= bLastTeamID; ++bOtherID, pOtherSoldier++ ) for ( ; bOtherID <= bLastTeamID; ++bOtherID )
{ {
pOtherSoldier = bOtherID;
// skip past ourselves and all inactive mercs // skip past ourselves and all inactive mercs
if ( bOtherID != bMercID && pOtherSoldier && pOtherSoldier->bActive && pOtherSoldier->ubProfile != NO_PROFILE && if ( bOtherID != bMercID && pOtherSoldier && pOtherSoldier->bActive && pOtherSoldier->ubProfile != NO_PROFILE &&
!(pOtherSoldier->bAssignment == IN_TRANSIT || !(pOtherSoldier->bAssignment == IN_TRANSIT ||
@@ -1558,7 +1569,7 @@ void HandleSnitchesReports( std::vector<SnitchEvent>& aVec )
void RememberSnitchableEvent( UINT8 ubTargetProfile, UINT8 ubSecondaryTargetProfile, BOOLEAN fSameGroupOnly, UINT8 ubEventType, std::vector<SnitchEvent>& aVec ) void RememberSnitchableEvent( UINT8 ubTargetProfile, UINT8 ubSecondaryTargetProfile, BOOLEAN fSameGroupOnly, UINT8 ubEventType, std::vector<SnitchEvent>& aVec )
{ {
UINT16 bSnitchID; SoldierID bSnitchID;
INT16 sSnitchingChance = 0; INT16 sSnitchingChance = 0;
UINT8 ubSnitchProfile; UINT8 ubSnitchProfile;
SOLDIERTYPE * pSnitch; SOLDIERTYPE * pSnitch;
@@ -1570,8 +1581,9 @@ void RememberSnitchableEvent( UINT8 ubTargetProfile, UINT8 ubSecondaryTargetProf
// loop through all other mercs // loop through all other mercs
bSnitchID = gTacticalStatus.Team[gbPlayerNum].bFirstID; bSnitchID = gTacticalStatus.Team[gbPlayerNum].bFirstID;
for ( pSnitch = MercPtrs[bSnitchID]; bSnitchID <= gTacticalStatus.Team[gbPlayerNum].bLastID; ++bSnitchID, pSnitch++ ) for ( ; bSnitchID <= gTacticalStatus.Team[gbPlayerNum].bLastID; ++bSnitchID )
{ {
pSnitch = bSnitchID;
ubSnitchProfile = pSnitch->ubProfile; ubSnitchProfile = pSnitch->ubProfile;
// skip past ourselves and all inactive mercs // skip past ourselves and all inactive mercs
if ( ProfileHasSkillTrait( ubSnitchProfile, SNITCH_NT ) && if ( ProfileHasSkillTrait( ubSnitchProfile, SNITCH_NT ) &&
@@ -1703,10 +1715,10 @@ void DailyMoraleUpdate(SOLDIERTYPE *pSoldier)
// Added by SANDRO // Added by SANDRO
BOOLEAN IsShowOffNearBy( SOLDIERTYPE * pSoldier ) BOOLEAN IsShowOffNearBy( SOLDIERTYPE * pSoldier )
{ {
UINT32 uiLoop; SoldierID uiLoop;
SOLDIERTYPE * pTeammate; SOLDIERTYPE *pTeammate;
BOOLEAN fOneException = FALSE; BOOLEAN fOneException = FALSE;
BOOLEAN fYesHeIs = FALSE; BOOLEAN fYesHeIs = FALSE;
if (!pSoldier) if (!pSoldier)
{ {
@@ -1717,9 +1729,9 @@ BOOLEAN IsShowOffNearBy( SOLDIERTYPE * pSoldier )
return( FALSE ); return( FALSE );
} }
for ( uiLoop = gTacticalStatus.Team[ pSoldier->bTeam ].bFirstID; uiLoop <= gTacticalStatus.Team[ pSoldier->bTeam ].bLastID; uiLoop++) for ( uiLoop = gTacticalStatus.Team[ pSoldier->bTeam ].bFirstID; uiLoop <= gTacticalStatus.Team[ pSoldier->bTeam ].bLastID; ++uiLoop )
{ {
pTeammate = MercPtrs[ uiLoop ]; pTeammate = uiLoop;
if ( pTeammate == NULL ) if ( pTeammate == NULL )
{ {
continue; continue;
+209 -210
View File
File diff suppressed because it is too large Load Diff
+1 -1
View File
@@ -238,7 +238,7 @@ void SlideToLocation( INT32 sDestGridNo );
void RebuildAllSoldierShadeTables( ); void RebuildAllSoldierShadeTables( );
void HandlePlayerTeamMemberDeath( SOLDIERTYPE *pSoldier ); void HandlePlayerTeamMemberDeath( SOLDIERTYPE *pSoldier );
UINT16 LastActiveTeamMember( UINT16 ubTeam ); SoldierID LastActiveTeamMember( UINT16 ubTeam );
BOOLEAN SoldierOnVisibleWorldTile( SOLDIERTYPE *pSoldier ); BOOLEAN SoldierOnVisibleWorldTile( SOLDIERTYPE *pSoldier );
SoldierID FindNextActiveAndAliveMerc( SOLDIERTYPE *pSoldier, BOOLEAN fGoodForLessOKLife, BOOLEAN fOnlyRegularMercs ); SoldierID FindNextActiveAndAliveMerc( SOLDIERTYPE *pSoldier, BOOLEAN fGoodForLessOKLife, BOOLEAN fOnlyRegularMercs );
+47 -45
View File
@@ -2143,55 +2143,57 @@ void HandleMouseRTX1Button( UINT32 *puiNewEvent )
void HandleMouseRTX2Button( UINT32 *puiNewEvent ) void HandleMouseRTX2Button( UINT32 *puiNewEvent )
{ {
if ( _KeyDown( ALT ) ) if ( _KeyDown( ALT ) )
AutoReload( gusSelectedSoldier ); AutoReload( gusSelectedSoldier );
else else
// Toggle squad's stealth mode..... // Toggle squad's stealth mode.....
// For each guy on squad... // For each guy on squad...
{
SOLDIERTYPE *pTeamSoldier;
SoldierID bLoop;
BOOLEAN fStealthOn = FALSE;
// Check if at least one guy is on stealth....
for ( bLoop = gTacticalStatus.Team[gbPlayerNum].bFirstID; bLoop <= gTacticalStatus.Team[gbPlayerNum].bLastID; ++bLoop )
{
pTeamSoldier = bLoop;
if ( OK_CONTROLLABLE_MERC( pTeamSoldier ) && pTeamSoldier->bAssignment == CurrentSquad() )
{ {
SOLDIERTYPE *pTeamSoldier; if ( pTeamSoldier->bStealthMode )
INT16 bLoop;
BOOLEAN fStealthOn = FALSE;
// Check if at least one guy is on stealth....
for (bLoop=gTacticalStatus.Team[gbPlayerNum].bFirstID, pTeamSoldier=MercPtrs[bLoop]; bLoop <= gTacticalStatus.Team[gbPlayerNum].bLastID; bLoop++, pTeamSoldier++)
{ {
if ( OK_CONTROLLABLE_MERC( pTeamSoldier ) && pTeamSoldier->bAssignment == CurrentSquad( ) ) fStealthOn = TRUE;
{
if ( pTeamSoldier->bStealthMode )
{
fStealthOn = TRUE;
}
}
}
fStealthOn = !fStealthOn;
for (bLoop=gTacticalStatus.Team[gbPlayerNum].bFirstID, pTeamSoldier=MercPtrs[bLoop]; bLoop <= gTacticalStatus.Team[gbPlayerNum].bLastID; bLoop++, pTeamSoldier++)
{
if ( OK_CONTROLLABLE_MERC( pTeamSoldier ) && pTeamSoldier->bAssignment == CurrentSquad( ) && !AM_A_ROBOT( pTeamSoldier ) )
{
if ( gpSMCurrentMerc != NULL && bLoop == gpSMCurrentMerc->ubID )
{
gfUIStanceDifferent = TRUE;
}
pTeamSoldier->bStealthMode = fStealthOn;
}
}
fInterfacePanelDirty = DIRTYLEVEL2;
// OK, display message
if ( fStealthOn )
{
ScreenMsg( FONT_MCOLOR_LTYELLOW, MSG_INTERFACE, pMessageStrings[ MSG_SQUAD_ON_STEALTHMODE ] );
}
else
{
ScreenMsg( FONT_MCOLOR_LTYELLOW, MSG_INTERFACE, pMessageStrings[ MSG_SQUAD_OFF_STEALTHMODE ] );
} }
} }
}
fStealthOn = !fStealthOn;
for ( bLoop = gTacticalStatus.Team[gbPlayerNum].bFirstID; bLoop <= gTacticalStatus.Team[gbPlayerNum].bLastID; ++bLoop )
{
pTeamSoldier = bLoop;
if ( OK_CONTROLLABLE_MERC( pTeamSoldier ) && pTeamSoldier->bAssignment == CurrentSquad() && !AM_A_ROBOT( pTeamSoldier ) )
{
if ( gpSMCurrentMerc != NULL && bLoop == gpSMCurrentMerc->ubID )
{
gfUIStanceDifferent = TRUE;
}
pTeamSoldier->bStealthMode = fStealthOn;
}
}
fInterfacePanelDirty = DIRTYLEVEL2;
// OK, display message
if ( fStealthOn )
{
ScreenMsg( FONT_MCOLOR_LTYELLOW, MSG_INTERFACE, pMessageStrings[MSG_SQUAD_ON_STEALTHMODE] );
}
else
{
ScreenMsg( FONT_MCOLOR_LTYELLOW, MSG_INTERFACE, pMessageStrings[MSG_SQUAD_OFF_STEALTHMODE] );
}
}
} }
// sevenfm: common functionality // sevenfm: common functionality
+9 -9
View File
@@ -1272,11 +1272,11 @@ void HandleRottingCorpses( )
// ATE: Check for multiple crows..... // ATE: Check for multiple crows.....
// Couint how many we have now... // Couint how many we have now...
{ {
UINT16 bLoop;
SOLDIERTYPE * pSoldier; SOLDIERTYPE * pSoldier;
for ( bLoop=gTacticalStatus.Team[ CIV_TEAM ].bFirstID, pSoldier=MercPtrs[bLoop]; bLoop <= gTacticalStatus.Team[ CIV_TEAM ].bLastID; bLoop++, pSoldier++) for ( SoldierID bLoop=gTacticalStatus.Team[ CIV_TEAM ].bFirstID; bLoop <= gTacticalStatus.Team[ CIV_TEAM ].bLastID; ++bLoop )
{ {
pSoldier = bLoop;
if (pSoldier->bActive && pSoldier->bInSector && (pSoldier->stats.bLife >= OKLIFE) && !( pSoldier->flags.uiStatusFlags & SOLDIER_GASSED ) ) if (pSoldier->bActive && pSoldier->bInSector && (pSoldier->stats.bLife >= OKLIFE) && !( pSoldier->flags.uiStatusFlags & SOLDIER_GASSED ) )
{ {
if ( pSoldier->ubBodyType == CROW ) if ( pSoldier->ubBodyType == CROW )
@@ -1344,8 +1344,7 @@ void MakeCorpseVisible( SOLDIERTYPE *pSoldier, ROTTING_CORPSE *pCorpse )
void AllMercsOnTeamLookForCorpse( ROTTING_CORPSE *pCorpse, INT8 bTeam ) void AllMercsOnTeamLookForCorpse( ROTTING_CORPSE *pCorpse, INT8 bTeam )
{ {
INT32 cnt; SOLDIERTYPE *pSoldier;
SOLDIERTYPE *pSoldier;
INT32 sGridNo; INT32 sGridNo;
// If this cump is already visible, return // If this cump is already visible, return
@@ -1360,13 +1359,14 @@ void AllMercsOnTeamLookForCorpse( ROTTING_CORPSE *pCorpse, INT8 bTeam )
} }
// IF IT'S THE SELECTED GUY, MAKE ANOTHER SELECTED! // IF IT'S THE SELECTED GUY, MAKE ANOTHER SELECTED!
cnt = gTacticalStatus.Team[ bTeam ].bFirstID; SoldierID cnt = gTacticalStatus.Team[ bTeam ].bFirstID;
sGridNo = pCorpse->def.sGridNo; sGridNo = pCorpse->def.sGridNo;
// look for all mercs on the same team, // look for all mercs on the same team,
for ( pSoldier = MercPtrs[ cnt ]; cnt <= gTacticalStatus.Team[ bTeam ].bLastID; cnt++,pSoldier++ ) for ( ; cnt <= gTacticalStatus.Team[ bTeam ].bLastID; ++cnt )
{ {
pSoldier = cnt;
// ATE: Ok, lets check for some basic things here! // ATE: Ok, lets check for some basic things here!
if ( pSoldier->stats.bLife >= OKLIFE && !TileIsOutOfBounds(pSoldier->sGridNo) && pSoldier->bActive && pSoldier->bInSector ) if ( pSoldier->stats.bLife >= OKLIFE && !TileIsOutOfBounds(pSoldier->sGridNo) && pSoldier->bActive && pSoldier->bInSector )
{ {
@@ -2526,7 +2526,6 @@ void LookForAndMayCommentOnSeeingCorpse( SOLDIERTYPE *pSoldier, INT32 sGridNo, U
{ {
ROTTING_CORPSE *pCorpse; ROTTING_CORPSE *pCorpse;
INT8 bToleranceThreshold = 0; INT8 bToleranceThreshold = 0;
INT32 cnt;
SOLDIERTYPE *pTeamSoldier; SOLDIERTYPE *pTeamSoldier;
if ( QuoteExp[ pSoldier->ubProfile ].QuoteExpHeadShotOnly == 1 ) if ( QuoteExp[ pSoldier->ubProfile ].QuoteExpHeadShotOnly == 1 )
@@ -2567,11 +2566,12 @@ void LookForAndMayCommentOnSeeingCorpse( SOLDIERTYPE *pSoldier, INT32 sGridNo, U
if ( Random( 2 ) == 1 ) if ( Random( 2 ) == 1 )
{ {
// IF IT'S THE SELECTED GUY, MAKE ANOTHER SELECTED! // IF IT'S THE SELECTED GUY, MAKE ANOTHER SELECTED!
cnt = gTacticalStatus.Team[ gbPlayerNum ].bFirstID; SoldierID cnt = gTacticalStatus.Team[ gbPlayerNum ].bFirstID;
// look for all mercs on the same team, // look for all mercs on the same team,
for ( pTeamSoldier = MercPtrs[ cnt ]; cnt <= gTacticalStatus.Team[ gbPlayerNum ].bLastID; cnt++,pTeamSoldier++ ) for ( ; cnt <= gTacticalStatus.Team[ gbPlayerNum ].bLastID; ++cnt )
{ {
pTeamSoldier = cnt;
// ATE: Ok, lets check for some basic things here! // ATE: Ok, lets check for some basic things here!
if ( pTeamSoldier->stats.bLife >= OKLIFE && !TileIsOutOfBounds(pTeamSoldier->sGridNo) && pTeamSoldier->bActive && pTeamSoldier->bInSector ) if ( pTeamSoldier->stats.bLife >= OKLIFE && !TileIsOutOfBounds(pTeamSoldier->sGridNo) && pTeamSoldier->bActive && pTeamSoldier->bInSector )
{ {
+2 -3
View File
@@ -759,7 +759,6 @@ UINT32 ShopKeeperScreenShutdown()
BOOLEAN EnterShopKeeperInterface() BOOLEAN EnterShopKeeperInterface()
{ {
VOBJECT_DESC VObjectDesc; VOBJECT_DESC VObjectDesc;
UINT16 ubCnt;
CHAR8 zTemp[32]; CHAR8 zTemp[32];
VSURFACE_DESC vs_desc; VSURFACE_DESC vs_desc;
@@ -886,9 +885,9 @@ BOOLEAN EnterShopKeeperInterface()
//Create an array of all mercs (anywhere!) currently in the player's employ, and load their small faces //Create an array of all mercs (anywhere!) currently in the player's employ, and load their small faces
// This is to support showing of repair item owner's faces even when they're not in the sector, as long as they still work for player // This is to support showing of repair item owner's faces even when they're not in the sector, as long as they still work for player
gubNumberMercsInArray = 0; gubNumberMercsInArray = 0;
for( ubCnt = gTacticalStatus.Team[ OUR_TEAM ].bFirstID; ubCnt <= gTacticalStatus.Team[ OUR_TEAM ].bLastID; ++ubCnt ) for( SoldierID ubCnt = gTacticalStatus.Team[ OUR_TEAM ].bFirstID; ubCnt <= gTacticalStatus.Team[ OUR_TEAM ].bLastID; ++ubCnt )
{ {
pSoldier = MercPtrs[ ubCnt ]; pSoldier = ubCnt;
if( pSoldier->bActive && ( pSoldier->ubProfile != NO_PROFILE ) && if( pSoldier->bActive && ( pSoldier->ubProfile != NO_PROFILE ) &&
!(pSoldier->flags.uiStatusFlags & SOLDIER_VEHICLE ) && !AM_A_ROBOT( pSoldier ) ) !(pSoldier->flags.uiStatusFlags & SOLDIER_VEHICLE ) && !AM_A_ROBOT( pSoldier ) )
+3 -3
View File
@@ -339,7 +339,6 @@ INT32 SkillCheck( SOLDIERTYPE * pSoldier, INT8 bReason, INT8 bChanceMod )
INT32 iSkill; INT32 iSkill;
INT32 iChance, iReportChance; INT32 iChance, iReportChance;
INT32 iRoll, iMadeItBy; INT32 iRoll, iMadeItBy;
INT32 iLoop;
SOLDIERTYPE * pTeamSoldier; SOLDIERTYPE * pTeamSoldier;
INT8 bBuddyIndex; INT8 bBuddyIndex;
BOOLEAN fForceDamnSound = FALSE; BOOLEAN fForceDamnSound = FALSE;
@@ -946,9 +945,10 @@ INT32 SkillCheck( SOLDIERTYPE * pSoldier, INT8 bReason, INT8 bChanceMod )
if (iRoll < iChance) if (iRoll < iChance)
{ {
// If a buddy of this merc is standing around nearby, they'll make a positive comment. // If a buddy of this merc is standing around nearby, they'll make a positive comment.
iLoop = gTacticalStatus.Team[ gbPlayerNum ].bFirstID; SoldierID iLoop = gTacticalStatus.Team[ gbPlayerNum ].bFirstID;
for ( pTeamSoldier = MercPtrs[ iLoop ]; iLoop <= gTacticalStatus.Team[ gbPlayerNum ].bLastID; iLoop++,pTeamSoldier++ ) for ( ; iLoop <= gTacticalStatus.Team[ gbPlayerNum ].bLastID; ++iLoop )
{ {
pTeamSoldier = iLoop;
if ( OK_INSECTOR_MERC( pTeamSoldier ) ) if ( OK_INSECTOR_MERC( pTeamSoldier ) )
{ {
if ( SpacesAway( pSoldier->sGridNo, pTeamSoldier->sGridNo ) < 15 ) if ( SpacesAway( pSoldier->sGridNo, pTeamSoldier->sGridNo ) < 15 )
+7 -7
View File
@@ -784,17 +784,17 @@ SoldierSelection::Setup( UINT32 aVal )
// pretty simple: we find every soldier in a radius around the target position and add him to the list // pretty simple: we find every soldier in a radius around the target position and add him to the list
// loop through all soldiers around // loop through all soldiers around
for ( UINT32 cnt = gTacticalStatus.Team[ OUR_TEAM ].bFirstID ; cnt <= gTacticalStatus.Team[ CIV_TEAM ].bLastID ; ++cnt ) for ( SoldierID id = gTacticalStatus.Team[ OUR_TEAM ].bFirstID ; id <= gTacticalStatus.Team[ CIV_TEAM ].bLastID ; ++id )
{ {
INT32 iRange = GetRangeInCellCoordsFromGridNoDiff( sTraitsMenuTargetGridNo, MercPtrs[ cnt ]->sGridNo ); INT32 iRange = GetRangeInCellCoordsFromGridNoDiff( sTraitsMenuTargetGridNo, id->sGridNo );
if ( iRange < 100 ) if ( iRange < 100 )
{ {
if ( cnt != pSoldier->ubID ) if ( id != pSoldier->ubID )
{ {
swprintf( pStr, L"%s", MercPtrs[ cnt ]->GetName() ); swprintf( pStr, L"%s", id->GetName() );
pOption = new POPUP_OPTION(&std::wstring( pStr ), new popupCallbackFunction<void, UINT8>( &Wrapper_Function_SoldierSelection, cnt ) ); pOption = new POPUP_OPTION(&std::wstring( pStr ), new popupCallbackFunction<void, UINT16>( &Wrapper_Function_SoldierSelection, id ) );
// grey out if no artillery can be called from this sector // grey out if no artillery can be called from this sector
if ( 0 ) if ( 0 )
@@ -865,11 +865,11 @@ DragSelection::Setup( UINT32 aVal )
// pretty simple: we find every soldier in a radius around the target position and add him to the list // pretty simple: we find every soldier in a radius around the target position and add him to the list
// loop through all soldiers around // loop through all soldiers around
for ( UINT32 cnt = gTacticalStatus.Team[OUR_TEAM].bFirstID; cnt <= gTacticalStatus.Team[CIV_TEAM].bLastID; ++cnt ) for ( SoldierID cnt = gTacticalStatus.Team[OUR_TEAM].bFirstID; cnt <= gTacticalStatus.Team[CIV_TEAM].bLastID; ++cnt )
{ {
if ( cnt != pSoldier->ubID && pSoldier->CanDragPerson(cnt) ) if ( cnt != pSoldier->ubID && pSoldier->CanDragPerson(cnt) )
{ {
swprintf( pStr, L"%s", MercPtrs[cnt]->GetName( ) ); swprintf( pStr, L"%s", cnt->GetName( ) );
pOption = new POPUP_OPTION( &std::wstring( pStr ), new popupCallbackFunction<void, UINT32>( &Wrapper_Function_DragSelection, cnt ) ); pOption = new POPUP_OPTION( &std::wstring( pStr ), new popupCallbackFunction<void, UINT32>( &Wrapper_Function_DragSelection, cnt ) );
+7 -9
View File
@@ -1761,16 +1761,14 @@ void AddSoldierToSectorGridNo( SOLDIERTYPE *pSoldier, INT32 sGridNo, UINT8 ubDir
// IsMercOnTeam() checks to see if the passed in Merc Profile ID is currently on the player's team // IsMercOnTeam() checks to see if the passed in Merc Profile ID is currently on the player's team
BOOLEAN IsMercOnTeam(UINT8 ubMercID, BOOLEAN aAlreadyInCountry, BOOLEAN aAlive) BOOLEAN IsMercOnTeam(UINT8 ubMercID, BOOLEAN aAlreadyInCountry, BOOLEAN aAlive)
{ {
UINT16 cnt;
UINT16 ubLastTeamID;
SOLDIERTYPE *pTeamSoldier; SOLDIERTYPE *pTeamSoldier;
SoldierID cnt = gTacticalStatus.Team[ OUR_TEAM ].bFirstID;
cnt = gTacticalStatus.Team[ OUR_TEAM ].bFirstID; SoldierID ubLastTeamID = gTacticalStatus.Team[ OUR_TEAM ].bLastID;
ubLastTeamID = gTacticalStatus.Team[ OUR_TEAM ].bLastID;
// look for all mercs on the same team, // look for all mercs on the same team,
for ( pTeamSoldier = MercPtrs[ cnt ]; cnt <= ubLastTeamID; ++cnt, pTeamSoldier++) for ( ; cnt <= ubLastTeamID; ++cnt )
{ {
pTeamSoldier = cnt;
if ( pTeamSoldier->ubProfile == ubMercID && pTeamSoldier->bActive ) if ( pTeamSoldier->ubProfile == ubMercID && pTeamSoldier->bActive )
{ {
if ( aAlreadyInCountry && pTeamSoldier->bAssignment == IN_TRANSIT ) if ( aAlreadyInCountry && pTeamSoldier->bAssignment == IN_TRANSIT )
@@ -1791,12 +1789,12 @@ BOOLEAN IsMercOnTeam(UINT8 ubMercID, BOOLEAN aAlreadyInCountry, BOOLEAN aAlive)
SoldierID GetSoldierIDFromMercID(UINT8 ubMercID) SoldierID GetSoldierIDFromMercID(UINT8 ubMercID)
{ {
SOLDIERTYPE *pTeamSoldier = NULL; SOLDIERTYPE *pTeamSoldier = NULL;
SoldierID cnt = gTacticalStatus.Team[OUR_TEAM].bFirstID;
UINT16 cnt = gTacticalStatus.Team[OUR_TEAM].bFirstID;
// look for all mercs on the same team, // look for all mercs on the same team,
for ( pTeamSoldier = MercPtrs[cnt]; cnt <= gTacticalStatus.Team[OUR_TEAM].bLastID; ++cnt, ++pTeamSoldier ) for ( ; cnt <= gTacticalStatus.Team[OUR_TEAM].bLastID; ++cnt )
{ {
pTeamSoldier = cnt;
if ( pTeamSoldier->ubProfile == ubMercID ) if ( pTeamSoldier->ubProfile == ubMercID )
{ {
if( pTeamSoldier->bActive ) if( pTeamSoldier->bActive )
+8 -7
View File
@@ -3559,7 +3559,6 @@ void SayBuddyWitnessedQuoteFromKill( SOLDIERTYPE *pKillerSoldier, INT32 sGridNo,
UINT16 ubNumMercs = 0; UINT16 ubNumMercs = 0;
UINT16 ubChosenMerc; UINT16 ubChosenMerc;
SOLDIERTYPE *pTeamSoldier; SOLDIERTYPE *pTeamSoldier;
INT32 cnt;
UINT16 usQuoteNum; UINT16 usQuoteNum;
BOOLEAN buddyquoteused = FALSE; BOOLEAN buddyquoteused = FALSE;
@@ -3570,11 +3569,12 @@ void SayBuddyWitnessedQuoteFromKill( SOLDIERTYPE *pKillerSoldier, INT32 sGridNo,
return; return;
// set up soldier ptr as first element in mercptrs list // set up soldier ptr as first element in mercptrs list
cnt = gTacticalStatus.Team[ gbPlayerNum ].bFirstID; SoldierID cnt = gTacticalStatus.Team[ gbPlayerNum ].bFirstID;
// run through list // run through list
for ( pTeamSoldier = MercPtrs[ cnt ]; cnt <= gTacticalStatus.Team[ gbPlayerNum ].bLastID; ++cnt, ++pTeamSoldier ) for ( ; cnt <= gTacticalStatus.Team[ gbPlayerNum ].bLastID; ++cnt )
{ {
pTeamSoldier = cnt;
// Add guy if he's a candidate... // Add guy if he's a candidate...
if ( OK_INSECTOR_MERC( pTeamSoldier ) && !AM_AN_EPC( pTeamSoldier ) && !( pTeamSoldier->flags.uiStatusFlags & SOLDIER_GASSED ) && !(AM_A_ROBOT( pTeamSoldier )) if ( OK_INSECTOR_MERC( pTeamSoldier ) && !AM_AN_EPC( pTeamSoldier ) && !( pTeamSoldier->flags.uiStatusFlags & SOLDIER_GASSED ) && !(AM_A_ROBOT( pTeamSoldier ))
&& !pTeamSoldier->flags.fMercAsleep && !TileIsOutOfBounds(pTeamSoldier->sGridNo) && pTeamSoldier->ubProfile != pKillerSoldier->ubProfile ) && !pTeamSoldier->flags.fMercAsleep && !TileIsOutOfBounds(pTeamSoldier->sGridNo) && pTeamSoldier->ubProfile != pKillerSoldier->ubProfile )
@@ -3709,8 +3709,9 @@ void SayBuddyWitnessedQuoteFromKill( SOLDIERTYPE *pKillerSoldier, INT32 sGridNo,
{ {
cnt = gTacticalStatus.Team[gbPlayerNum].bFirstID; cnt = gTacticalStatus.Team[gbPlayerNum].bFirstID;
for ( pTeamSoldier = MercPtrs[cnt]; cnt <= gTacticalStatus.Team[gbPlayerNum].bLastID; ++cnt, ++pTeamSoldier ) for ( ; cnt <= gTacticalStatus.Team[gbPlayerNum].bLastID; ++cnt )
{ {
pTeamSoldier = cnt;
// we do not exclude the buddies from above. If we get to this point, it might have been a buddy that already said his line. In that case additional dialogue might play other ones // we do not exclude the buddies from above. If we get to this point, it might have been a buddy that already said his line. In that case additional dialogue might play other ones
// Add guy if he's a candidate... // Add guy if he's a candidate...
@@ -3742,7 +3743,6 @@ void SayBuddyWitnessedQuoteFromKill( SOLDIERTYPE *pKillerSoldier, INT32 sGridNo,
void HandleKilledQuote( SOLDIERTYPE *pKilledSoldier, SOLDIERTYPE *pKillerSoldier, INT32 sGridNo, INT8 bLevel ) void HandleKilledQuote( SOLDIERTYPE *pKilledSoldier, SOLDIERTYPE *pKillerSoldier, INT32 sGridNo, INT8 bLevel )
{ {
SOLDIERTYPE *pTeamSoldier; SOLDIERTYPE *pTeamSoldier;
INT32 cnt;
// WDS - make number of mercenaries, etc. be configurable // WDS - make number of mercenaries, etc. be configurable
std::vector<UINT16> ubMercsInSector (CODE_MAXIMUM_NUMBER_OF_PLAYER_SLOTS, 0); std::vector<UINT16> ubMercsInSector (CODE_MAXIMUM_NUMBER_OF_PLAYER_SLOTS, 0);
UINT16 ubNumMercs = 0; UINT16 ubNumMercs = 0;
@@ -3802,11 +3802,12 @@ void HandleKilledQuote( SOLDIERTYPE *pKilledSoldier, SOLDIERTYPE *pKillerSoldier
if ( fDoSomeoneElse ) if ( fDoSomeoneElse )
{ {
// Check if a person is here that has this quote.... // Check if a person is here that has this quote....
cnt = gTacticalStatus.Team[ gbPlayerNum ].bFirstID; SoldierID cnt = gTacticalStatus.Team[ gbPlayerNum ].bFirstID;
// run through list // run through list
for ( pTeamSoldier = MercPtrs[ cnt ]; cnt <= gTacticalStatus.Team[ gbPlayerNum ].bLastID; cnt++,pTeamSoldier++ ) for ( ; cnt <= gTacticalStatus.Team[ gbPlayerNum ].bLastID; ++cnt )
{ {
pTeamSoldier = cnt;
if ( cnt != pKillerSoldier->ubID ) if ( cnt != pKillerSoldier->ubID )
{ {
if ( OK_INSECTOR_MERC( pTeamSoldier ) && !( pTeamSoldier->flags.uiStatusFlags & SOLDIER_GASSED ) && !AM_AN_EPC( pTeamSoldier ) ) if ( OK_INSECTOR_MERC( pTeamSoldier ) && !( pTeamSoldier->flags.uiStatusFlags & SOLDIER_GASSED ) && !AM_AN_EPC( pTeamSoldier ) )
+71 -66
View File
@@ -2836,7 +2836,6 @@ BOOLEAN SOLDIERTYPE::ChangeSoldierState( UINT16 usNewState, UINT16 usStartingAni
// This function reevaluates the stance if the guy sees us! // This function reevaluates the stance if the guy sees us!
BOOLEAN ReevaluateEnemyStance( SOLDIERTYPE *pSoldier, UINT16 usAnimState ) BOOLEAN ReevaluateEnemyStance( SOLDIERTYPE *pSoldier, UINT16 usAnimState )
{ {
INT32 cnt;
SoldierID iClosestEnemy = NOBODY; SoldierID iClosestEnemy = NOBODY;
INT16 sTargetXPos, sTargetYPos; INT16 sTargetXPos, sTargetYPos;
BOOLEAN fReturnVal = FALSE; BOOLEAN fReturnVal = FALSE;
@@ -2871,7 +2870,7 @@ BOOLEAN ReevaluateEnemyStance( SOLDIERTYPE *pSoldier, UINT16 usAnimState )
if ( pSoldier->aiData.bOppCnt > 0 ) if ( pSoldier->aiData.bOppCnt > 0 )
{ {
// Pick a guy this buddy sees and turn towards them! // Pick a guy this buddy sees and turn towards them!
for ( cnt = gTacticalStatus.Team[OUR_TEAM].bFirstID; cnt <= gTacticalStatus.Team[OUR_TEAM].bLastID; cnt++ ) for ( SoldierID cnt = gTacticalStatus.Team[OUR_TEAM].bFirstID; cnt <= gTacticalStatus.Team[OUR_TEAM].bLastID; ++cnt )
{ {
if ( pSoldier->aiData.bOppList[cnt] == SEEN_CURRENTLY ) if ( pSoldier->aiData.bOppList[cnt] == SEEN_CURRENTLY )
{ {
@@ -12260,16 +12259,13 @@ BOOLEAN SOLDIERTYPE::MercInHighWater( void )
void RevivePlayerTeam( ) void RevivePlayerTeam( )
{ {
INT32 cnt;
SOLDIERTYPE *pSoldier;
// End the turn of player charactors // End the turn of player charactors
cnt = gTacticalStatus.Team[gbPlayerNum].bFirstID; SoldierID id = gTacticalStatus.Team[gbPlayerNum].bFirstID;
// look for all mercs on the same team, // look for all mercs on the same team,
for ( pSoldier = MercPtrs[cnt]; cnt <= gTacticalStatus.Team[gbPlayerNum].bLastID; cnt++, pSoldier++ ) for ( ; id <= gTacticalStatus.Team[gbPlayerNum].bLastID; ++id )
{ {
pSoldier->ReviveSoldier( ); id->ReviveSoldier( );
} }
} }
@@ -15221,10 +15217,11 @@ BOOLEAN SOLDIERTYPE::IsFeedingExternal( SoldierID * pubId1, UINT16* pGunSlot1,
INT32 nextGridNoinSight = NewGridNo( this->sGridNo, DirectionInc( this->ubDirection ) ); INT32 nextGridNoinSight = NewGridNo( this->sGridNo, DirectionInc( this->ubDirection ) );
SOLDIERTYPE* pTeamSoldier = NULL; SOLDIERTYPE* pTeamSoldier = NULL;
INT32 cnt = gTacticalStatus.Team[this->bTeam].bFirstID; SoldierID cnt = gTacticalStatus.Team[this->bTeam].bFirstID;
INT32 lastid = gTacticalStatus.Team[this->bTeam].bLastID; SoldierID lastid = gTacticalStatus.Team[this->bTeam].bLastID;
for ( pTeamSoldier = MercPtrs[cnt]; cnt < lastid; ++cnt, ++pTeamSoldier ) for ( ; cnt < lastid; ++cnt )
{ {
pTeamSoldier = cnt;
// check if teamsoldier exists in this sector // check if teamsoldier exists in this sector
if ( !pTeamSoldier || !pTeamSoldier->bActive || !pTeamSoldier->bInSector || pTeamSoldier->sSectorX != this->sSectorX || pTeamSoldier->sSectorY != this->sSectorY || pTeamSoldier->bSectorZ != this->bSectorZ ) if ( !pTeamSoldier || !pTeamSoldier->bActive || !pTeamSoldier->bInSector || pTeamSoldier->sSectorX != this->sSectorX || pTeamSoldier->sSectorY != this->sSectorY || pTeamSoldier->bSectorZ != this->bSectorZ )
continue; continue;
@@ -16234,9 +16231,10 @@ void SOLDIERTYPE::LooseDisguise( void )
// rehandle sight for everybody // rehandle sight for everybody
SOLDIERTYPE* pSoldier; SOLDIERTYPE* pSoldier;
UINT16 iLoop = gTacticalStatus.Team[OUR_TEAM].bFirstID; SoldierID iLoop = gTacticalStatus.Team[OUR_TEAM].bFirstID;
for ( pSoldier = MercPtrs[iLoop]; iLoop <= gTacticalStatus.Team[CIV_TEAM].bLastID; ++iLoop, ++pSoldier ) for ( ; iLoop <= gTacticalStatus.Team[CIV_TEAM].bLastID; ++iLoop )
{ {
pSoldier = iLoop;
if ( pSoldier->bActive && pSoldier->bInSector && pSoldier->stats.bLife > 0 ) if ( pSoldier->bActive && pSoldier->bInSector && pSoldier->stats.bLife > 0 )
{ {
RecalculateOppCntsDueToNoLongerNeutral( pSoldier ); RecalculateOppCntsDueToNoLongerNeutral( pSoldier );
@@ -18880,10 +18878,11 @@ BOOLEAN SOLDIERTYPE::OrderArtilleryStrike( UINT32 usSectorNr, INT32 sTargetGridN
UINT16 mortararray[maxFiringMortarsAmount] = { 0 }; UINT16 mortararray[maxFiringMortarsAmount] = { 0 };
SOLDIERTYPE* pSoldier = NULL; SOLDIERTYPE* pSoldier = NULL;
INT32 cnt = gTacticalStatus.Team[bTeam].bFirstID; SoldierID cnt = gTacticalStatus.Team[bTeam].bFirstID;
INT32 lastid = gTacticalStatus.Team[bTeam].bLastID; SoldierID lastid = gTacticalStatus.Team[bTeam].bLastID;
for ( pSoldier = MercPtrs[cnt]; (cnt < lastid) && (mortaritemcnt < maxFiringMortarsAmount); ++cnt, ++pSoldier ) for ( ; (cnt < lastid) && (mortaritemcnt < maxFiringMortarsAmount); ++cnt )
{ {
pSoldier = cnt;
// check if soldier exists in this sector // check if soldier exists in this sector
if ( !pSoldier || !pSoldier->bActive || pSoldier->sSectorX != sSectorX || pSoldier->sSectorY != sSectorY || pSoldier->bSectorZ != bSectorZ || pSoldier->bAssignment > ON_DUTY ) if ( !pSoldier || !pSoldier->bActive || pSoldier->sSectorX != sSectorX || pSoldier->sSectorY != sSectorY || pSoldier->bSectorZ != bSectorZ || pSoldier->bAssignment > ON_DUTY )
continue; continue;
@@ -18924,8 +18923,9 @@ BOOLEAN SOLDIERTYPE::OrderArtilleryStrike( UINT32 usSectorNr, INT32 sTargetGridN
// second loop: check for all mortar shells and 'fire' them // second loop: check for all mortar shells and 'fire' them
cnt = gTacticalStatus.Team[bTeam].bFirstID; cnt = gTacticalStatus.Team[bTeam].bFirstID;
for ( pSoldier = MercPtrs[cnt]; cnt < lastid; ++cnt, ++pSoldier ) for ( ; cnt < lastid; ++cnt )
{ {
pSoldier = cnt;
// check if soldier exists in this sector // check if soldier exists in this sector
if ( !pSoldier || !pSoldier->bActive || pSoldier->sSectorX != sSectorX || pSoldier->sSectorY != sSectorY || pSoldier->bSectorZ != bSectorZ || pSoldier->bAssignment > ON_DUTY ) if ( !pSoldier || !pSoldier->bActive || pSoldier->sSectorX != sSectorX || pSoldier->sSectorY != sSectorY || pSoldier->bSectorZ != bSectorZ || pSoldier->bAssignment > ON_DUTY )
continue; continue;
@@ -21602,15 +21602,16 @@ BOOLEAN SOLDIERTYPE::OrderTurnCoatToSwitchSides( SoldierID usID )
void SOLDIERTYPE::OrderAllTurnCoatToSwitchSides() void SOLDIERTYPE::OrderAllTurnCoatToSwitchSides()
{ {
SOLDIERTYPE *pSoldier; SOLDIERTYPE *pSoldier;
INT32 cnt = gTacticalStatus.Team[ENEMY_TEAM].bFirstID; SoldierID cnt = gTacticalStatus.Team[ENEMY_TEAM].bFirstID;
// rftr: force the player to enter turn-based combat. this function already includes a check to see if we're already in combat, so no harm calling this. // rftr: force the player to enter turn-based combat. this function already includes a check to see if we're already in combat, so no harm calling this.
// this also prevents a hang when activating a sector with 100% turncoats // this also prevents a hang when activating a sector with 100% turncoats
EnterCombatMode(OUR_TEAM); EnterCombatMode(OUR_TEAM);
// run through list // run through list
for ( pSoldier = MercPtrs[cnt]; cnt <= gTacticalStatus.Team[ENEMY_TEAM].bLastID; ++cnt, ++pSoldier ) for ( ; cnt <= gTacticalStatus.Team[ENEMY_TEAM].bLastID; ++cnt )
{ {
pSoldier = cnt;
if ( pSoldier->bActive && pSoldier->bInSector ) if ( pSoldier->bActive && pSoldier->bInSector )
{ {
if ( pSoldier->usSoldierFlagMask2 & SOLDIER_TURNCOAT ) if ( pSoldier->usSoldierFlagMask2 & SOLDIER_TURNCOAT )
@@ -23687,16 +23688,15 @@ void SOLDIERTYPE::UpdateRobotControllerGivenRobot( void )
//the original function passed in pRobot, not pSoldier //the original function passed in pRobot, not pSoldier
SOLDIERTYPE *pRobot = this; SOLDIERTYPE *pRobot = this;
SOLDIERTYPE *pTeamSoldier; SOLDIERTYPE *pTeamSoldier;
INT32 cnt = 0;
// Loop through guys and look for a controller!
// set up soldier ptr as first element in mercptrs list // set up soldier ptr as first element in mercptrs list
cnt = gTacticalStatus.Team[gbPlayerNum].bFirstID; SoldierID cnt = gTacticalStatus.Team[gbPlayerNum].bFirstID;
// run through list // Loop through guys and look for a controller!
for ( pTeamSoldier = MercPtrs[cnt]; cnt <= gTacticalStatus.Team[gbPlayerNum].bLastID; cnt++, pTeamSoldier++ ) for ( ; cnt <= gTacticalStatus.Team[gbPlayerNum].bLastID; ++cnt )
{ {
pTeamSoldier = cnt;
if ( pTeamSoldier->bActive ) if ( pTeamSoldier->bActive )
{ {
if ( pTeamSoldier->ControllingRobot( ) ) if ( pTeamSoldier->ControllingRobot( ) )
@@ -23714,7 +23714,6 @@ void SOLDIERTYPE::UpdateRobotControllerGivenRobot( void )
void SOLDIERTYPE::UpdateRobotControllerGivenController( void ) void SOLDIERTYPE::UpdateRobotControllerGivenController( void )
{ {
SOLDIERTYPE *pTeamSoldier; SOLDIERTYPE *pTeamSoldier;
INT32 cnt = 0;
// First see if are still controlling the robot // First see if are still controlling the robot
if ( !this->ControllingRobot( ) ) if ( !this->ControllingRobot( ) )
@@ -23723,11 +23722,12 @@ void SOLDIERTYPE::UpdateRobotControllerGivenController( void )
} }
// set up soldier ptr as first element in mercptrs list // set up soldier ptr as first element in mercptrs list
cnt = gTacticalStatus.Team[gbPlayerNum].bFirstID; SoldierID cnt = gTacticalStatus.Team[gbPlayerNum].bFirstID;
// Loop through guys to find the robot.... // Loop through guys to find the robot....
for ( pTeamSoldier = MercPtrs[cnt]; cnt <= gTacticalStatus.Team[gbPlayerNum].bLastID; cnt++, pTeamSoldier++ ) for ( ; cnt <= gTacticalStatus.Team[gbPlayerNum].bLastID; ++cnt )
{ {
pTeamSoldier = cnt;
if ( pTeamSoldier->bActive && (pTeamSoldier->flags.uiStatusFlags & SOLDIER_ROBOT) ) if ( pTeamSoldier->bActive && (pTeamSoldier->flags.uiStatusFlags & SOLDIER_ROBOT) )
{ {
pTeamSoldier->ubRobotRemoteHolderID = this->ubID; pTeamSoldier->ubRobotRemoteHolderID = this->ubID;
@@ -23923,11 +23923,11 @@ void PlayStealthySoldierFootstepSound( SOLDIERTYPE *pSoldier )
void CrowsFlyAway( UINT8 ubTeam ) void CrowsFlyAway( UINT8 ubTeam )
{ {
UINT32 cnt;
SOLDIERTYPE *pTeamSoldier; SOLDIERTYPE *pTeamSoldier;
for ( cnt = gTacticalStatus.Team[ubTeam].bFirstID, pTeamSoldier = MercPtrs[cnt]; cnt <= gTacticalStatus.Team[ubTeam].bLastID; cnt++, pTeamSoldier++ ) for ( SoldierID cnt = gTacticalStatus.Team[ubTeam].bFirstID; cnt <= gTacticalStatus.Team[ubTeam].bLastID; ++cnt )
{ {
pTeamSoldier = cnt;
if ( pTeamSoldier->bActive && pTeamSoldier->bInSector ) if ( pTeamSoldier->bActive && pTeamSoldier->bInSector )
{ {
if ( pTeamSoldier->ubBodyType == CROW && pTeamSoldier->usAnimState != CROW_FLY ) if ( pTeamSoldier->ubBodyType == CROW && pTeamSoldier->usAnimState != CROW_FLY )
@@ -23943,7 +23943,6 @@ void CrowsFlyAway( UINT8 ubTeam )
#ifdef JA2BETAVERSION #ifdef JA2BETAVERSION
void DebugValidateSoldierData( ) void DebugValidateSoldierData( )
{ {
UINT32 cnt;
SOLDIERTYPE *pSoldier; SOLDIERTYPE *pSoldier;
CHAR16 sString[1024]; CHAR16 sString[1024];
BOOLEAN fProblemDetected = FALSE; BOOLEAN fProblemDetected = FALSE;
@@ -23960,9 +23959,10 @@ void DebugValidateSoldierData( )
uiFrameCount = 0; uiFrameCount = 0;
// Loop through our team... // Loop through our team...
cnt = gTacticalStatus.Team[gbPlayerNum].bFirstID; SoldierID cnt = gTacticalStatus.Team[gbPlayerNum].bFirstID;
for ( pSoldier = MercPtrs[cnt]; cnt <= gTacticalStatus.Team[gbPlayerNum].bLastID; ++cnt, pSoldier++ ) for ( ; cnt <= gTacticalStatus.Team[gbPlayerNum].bLastID; ++cnt )
{ {
pSoldier = cnt;
if ( pSoldier->bActive ) if ( pSoldier->bActive )
{ {
// OK, first check for alive people // OK, first check for alive people
@@ -24048,7 +24048,6 @@ void SOLDIERTYPE::BeginTyingToFall( void )
void SOLDIERTYPE::SetSoldierAsUnderAiControl( void ) void SOLDIERTYPE::SetSoldierAsUnderAiControl( void )
{ {
SOLDIERTYPE *pSoldier = NULL; SOLDIERTYPE *pSoldier = NULL;
INT32 cnt;
//this is silly, but left over from when pSoldierToSet was passed in as a parameter //this is silly, but left over from when pSoldierToSet was passed in as a parameter
if ( this == NULL ) if ( this == NULL )
@@ -24057,9 +24056,10 @@ void SOLDIERTYPE::SetSoldierAsUnderAiControl( void )
} }
// Loop through ALL teams... // Loop through ALL teams...
cnt = gTacticalStatus.Team[OUR_TEAM].bFirstID; SoldierID cnt = gTacticalStatus.Team[OUR_TEAM].bFirstID;
for ( pSoldier = MercPtrs[cnt]; cnt <= gTacticalStatus.Team[LAST_TEAM].bLastID; cnt++, pSoldier++ ) for ( ; cnt <= gTacticalStatus.Team[LAST_TEAM].bLastID; ++cnt )
{ {
pSoldier = cnt;
if ( pSoldier->bActive ) if ( pSoldier->bActive )
{ {
pSoldier->flags.uiStatusFlags &= ~SOLDIER_UNDERAICONTROL; pSoldier->flags.uiStatusFlags &= ~SOLDIER_UNDERAICONTROL;
@@ -24096,12 +24096,12 @@ void HandlePlayerTogglingLightEffects( BOOLEAN fToggleValue )
void EnableDisableSoldierLightEffects( BOOLEAN fEnableLights ) void EnableDisableSoldierLightEffects( BOOLEAN fEnableLights )
{ {
SOLDIERTYPE *pSoldier = NULL; SOLDIERTYPE *pSoldier = NULL;
INT32 cnt;
// Loop through player teams... // Loop through player teams...
cnt = gTacticalStatus.Team[OUR_TEAM].bFirstID; SoldierID cnt = gTacticalStatus.Team[OUR_TEAM].bFirstID;
for ( pSoldier = MercPtrs[cnt]; cnt <= gTacticalStatus.Team[OUR_TEAM].bLastID; cnt++, pSoldier++ ) for ( ; cnt <= gTacticalStatus.Team[OUR_TEAM].bLastID; ++cnt )
{ {
pSoldier = cnt;
//if the soldier is in the sector //if the soldier is in the sector
if ( pSoldier->bActive && pSoldier->bInSector && pSoldier->stats.bLife >= OKLIFE ) if ( pSoldier->bActive && pSoldier->bInSector && pSoldier->stats.bLife >= OKLIFE )
{ {
@@ -24248,11 +24248,11 @@ BOOLEAN SOLDIERTYPE::CanStartDrag(void)
if (!TileIsOutOfBounds(sNewGridNo) && sNewGridNo != this->sGridNo) if (!TileIsOutOfBounds(sNewGridNo) && sNewGridNo != this->sGridNo)
{ {
// soldiers // soldiers
for (UINT32 cnt = gTacticalStatus.Team[OUR_TEAM].bFirstID; cnt <= gTacticalStatus.Team[CIV_TEAM].bLastID; ++cnt) for ( SoldierID cnt = gTacticalStatus.Team[OUR_TEAM].bFirstID; cnt <= gTacticalStatus.Team[CIV_TEAM].bLastID; ++cnt)
{ {
if (cnt != this->ubID && if (cnt != this->ubID &&
cnt != NOBODY && cnt != NOBODY &&
MercPtrs[cnt]->sGridNo == sNewGridNo && cnt->sGridNo == sNewGridNo &&
this->CanDragPerson(cnt)) this->CanDragPerson(cnt))
{ {
return TRUE; return TRUE;
@@ -24312,11 +24312,11 @@ void SOLDIERTYPE::StartDrag(void)
if (!TileIsOutOfBounds(sNewGridNo) && sNewGridNo != this->sGridNo) if (!TileIsOutOfBounds(sNewGridNo) && sNewGridNo != this->sGridNo)
{ {
// soldiers // soldiers
for (UINT32 cnt = gTacticalStatus.Team[OUR_TEAM].bFirstID; cnt <= gTacticalStatus.Team[CIV_TEAM].bLastID; ++cnt) for ( SoldierID cnt = gTacticalStatus.Team[OUR_TEAM].bFirstID; cnt <= gTacticalStatus.Team[CIV_TEAM].bLastID; ++cnt)
{ {
if (cnt != this->ubID && if (cnt != this->ubID &&
MercPtrs[cnt] && cnt != NOBODY &&
MercPtrs[cnt]->sGridNo == sNewGridNo && cnt->sGridNo == sNewGridNo &&
this->CanDragPerson(cnt)) this->CanDragPerson(cnt))
{ {
SetDragOrderPerson(cnt); SetDragOrderPerson(cnt);
@@ -24488,13 +24488,12 @@ INT8 NUM_SKILL_TRAITS( SOLDIERTYPE * pSoldier, UINT8 uiSkillTraitNumber )
UINT8 GetSquadleadersCountInVicinity( SOLDIERTYPE * pSoldier, BOOLEAN fWithHigherLevel, BOOLEAN fDontCheckDistance ) UINT8 GetSquadleadersCountInVicinity( SOLDIERTYPE * pSoldier, BOOLEAN fWithHigherLevel, BOOLEAN fDontCheckDistance )
{ {
UINT16 cnt = 0;
UINT8 ubNumberSL = 0; UINT8 ubNumberSL = 0;
// loop through all soldiers around // loop through all soldiers around
for ( cnt = gTacticalStatus.Team[pSoldier->bTeam].bFirstID; cnt <= gTacticalStatus.Team[pSoldier->bTeam].bLastID; cnt++ ) for ( SoldierID cnt = gTacticalStatus.Team[pSoldier->bTeam].bFirstID; cnt <= gTacticalStatus.Team[pSoldier->bTeam].bLastID; ++cnt )
{ {
SOLDIERTYPE *pSquadLeader = MercPtrs[cnt]; SOLDIERTYPE *pSquadLeader = cnt;
// Get active conscious soldier // Get active conscious soldier
if ( pSquadLeader != pSoldier && pSquadLeader->bActive && //MercPtrs[ cnt ]->aiData.bShock < 20 && if ( pSquadLeader != pSoldier && pSquadLeader->bActive && //MercPtrs[ cnt ]->aiData.bShock < 20 &&
pSquadLeader->stats.bLife >= OKLIFE && HAS_SKILL_TRAIT( pSquadLeader, SQUADLEADER_NT ) ) pSquadLeader->stats.bLife >= OKLIFE && HAS_SKILL_TRAIT( pSquadLeader, SQUADLEADER_NT ) )
@@ -24531,9 +24530,9 @@ UINT8 GetSquadleadersCountInVicinity( SOLDIERTYPE * pSoldier, BOOLEAN fWithHighe
// special loop for militia - they can get a bonus from our mercs // special loop for militia - they can get a bonus from our mercs
if ( pSoldier->bTeam == MILITIA_TEAM && ubNumberSL < gSkillTraitValues.ubSLMaxBonuses ) if ( pSoldier->bTeam == MILITIA_TEAM && ubNumberSL < gSkillTraitValues.ubSLMaxBonuses )
{ {
for ( cnt = gTacticalStatus.Team[OUR_TEAM].bFirstID; cnt <= gTacticalStatus.Team[OUR_TEAM].bLastID; ++cnt ) for ( SoldierID cnt = gTacticalStatus.Team[OUR_TEAM].bFirstID; cnt <= gTacticalStatus.Team[OUR_TEAM].bLastID; ++cnt )
{ {
SOLDIERTYPE *pSquadLeader = MercPtrs[cnt]; SOLDIERTYPE *pSquadLeader = cnt;
// Get active conscious soldier // Get active conscious soldier
if ( pSquadLeader != pSoldier && pSquadLeader->bActive && //MercPtrs[ cnt ]->aiData.bShock < 20 && if ( pSquadLeader != pSoldier && pSquadLeader->bActive && //MercPtrs[ cnt ]->aiData.bShock < 20 &&
pSquadLeader->stats.bLife >= OKLIFE && HAS_SKILL_TRAIT( pSquadLeader, SQUADLEADER_NT ) ) pSquadLeader->stats.bLife >= OKLIFE && HAS_SKILL_TRAIT( pSquadLeader, SQUADLEADER_NT ) )
@@ -24981,7 +24980,7 @@ BOOLEAN ResolvePendingInterrupt( SOLDIERTYPE * pSoldier, UINT8 ubInterruptType )
if ( gGameExternalOptions.fAllowCollectiveInterrupts ) if ( gGameExternalOptions.fAllowCollectiveInterrupts )
{ {
SOLDIERTYPE *pTeammate; SOLDIERTYPE *pTeammate;
UINT16 uCnt2 = 0, usColIntChance = 0; UINT16 usColIntChance = 0;
UINT8 ubOriginalInterruptersCount = ubInterruptersFound, uCnt3 = 0; UINT8 ubOriginalInterruptersCount = ubInterruptersFound, uCnt3 = 0;
BOOLEAN fAlreadyIn; BOOLEAN fAlreadyIn;
@@ -24989,9 +24988,10 @@ BOOLEAN ResolvePendingInterrupt( SOLDIERTYPE * pSoldier, UINT8 ubInterruptType )
{ {
pInterrupter = MercPtrs[ubaInterruptersList[uCnt]]; pInterrupter = MercPtrs[ubaInterruptersList[uCnt]];
uCnt2 = gTacticalStatus.Team[pInterrupter->bTeam].bFirstID; SoldierID uCnt2 = gTacticalStatus.Team[pInterrupter->bTeam].bFirstID;
for ( pTeammate = MercPtrs[uCnt2]; uCnt2 <= gTacticalStatus.Team[pInterrupter->bTeam].bLastID; uCnt2++, pTeammate++ ) for ( ; uCnt2 <= gTacticalStatus.Team[pInterrupter->bTeam].bLastID; ++uCnt2 )
{ {
pTeammate = uCnt2;
if ( pTeammate == NULL ) if ( pTeammate == NULL )
continue; // not valid continue; // not valid
if ( pTeammate->bTeam != pInterrupter->bTeam ) if ( pTeammate->bTeam != pInterrupter->bTeam )
@@ -25236,10 +25236,11 @@ BOOLEAN GetRadioOperatorSignal( SoldierID usOwner, INT32* psTargetGridNo )
bTeam = ENEMY_TEAM; bTeam = ENEMY_TEAM;
SOLDIERTYPE* pSoldier = NULL; SOLDIERTYPE* pSoldier = NULL;
INT32 cnt = gTacticalStatus.Team[bTeam].bFirstID; SoldierID cnt = gTacticalStatus.Team[bTeam].bFirstID;
INT32 lastid = gTacticalStatus.Team[bTeam].bLastID; SoldierID lastid = gTacticalStatus.Team[bTeam].bLastID;
for ( pSoldier = MercPtrs[cnt]; cnt < lastid; ++cnt, ++pSoldier ) for ( ; cnt < lastid; ++cnt )
{ {
pSoldier = cnt;
if ( pSoldier && pSoldier->CanUseRadio( FALSE ) && pSoldier->bActive && pSoldier->bInSector && (pSoldier->sSectorX == gWorldSectorX) && (pSoldier->sSectorY == gWorldSectorY) && (pSoldier->bSectorZ == gbWorldSectorZ) ) if ( pSoldier && pSoldier->CanUseRadio( FALSE ) && pSoldier->bActive && pSoldier->bInSector && (pSoldier->sSectorX == gWorldSectorX) && (pSoldier->sSectorY == gWorldSectorY) && (pSoldier->bSectorZ == gbWorldSectorZ) )
{ {
*psTargetGridNo = pSoldier->sGridNo; *psTargetGridNo = pSoldier->sGridNo;
@@ -25306,10 +25307,11 @@ BOOLEAN IsValidArtilleryOrderSector( INT16 sSectorX, INT16 sSectorY, INT8 bSecto
BOOLEAN activeradio = FALSE; BOOLEAN activeradio = FALSE;
BOOLEAN mortarfound = FALSE; BOOLEAN mortarfound = FALSE;
SOLDIERTYPE* pSoldier = NULL; SOLDIERTYPE* pSoldier = NULL;
INT32 cnt = gTacticalStatus.Team[bTeam].bFirstID; SoldierID cnt = gTacticalStatus.Team[bTeam].bFirstID;
INT32 lastid = gTacticalStatus.Team[bTeam].bLastID; SoldierID lastid = gTacticalStatus.Team[bTeam].bLastID;
for ( pSoldier = MercPtrs[cnt]; cnt < lastid; ++cnt, ++pSoldier ) for ( ; cnt < lastid; ++cnt )
{ {
pSoldier = cnt;
// check if soldier exists in this sector, and is on duty // check if soldier exists in this sector, and is on duty
if ( !pSoldier || !pSoldier->bActive || pSoldier->sSectorX != sSectorX || pSoldier->sSectorY != sSectorY || pSoldier->bSectorZ != bSectorZ || pSoldier->bAssignment > ON_DUTY ) if ( !pSoldier || !pSoldier->bActive || pSoldier->sSectorX != sSectorX || pSoldier->sSectorY != sSectorY || pSoldier->bSectorZ != bSectorZ || pSoldier->bAssignment > ON_DUTY )
continue; continue;
@@ -25332,10 +25334,11 @@ BOOLEAN SectorJammed( )
{ {
// check every soldier: are we jamming frequencies? // check every soldier: are we jamming frequencies?
SOLDIERTYPE* pSoldier = NULL; SOLDIERTYPE* pSoldier = NULL;
INT32 cnt = gTacticalStatus.Team[OUR_TEAM].bFirstID; SoldierID cnt = gTacticalStatus.Team[OUR_TEAM].bFirstID;
INT32 lastid = MAX_NUM_SOLDIERS; SoldierID lastid = MAX_NUM_SOLDIERS;
for ( pSoldier = MercPtrs[cnt]; cnt < lastid; ++cnt, ++pSoldier ) for ( ; cnt < lastid; ++cnt )
{ {
pSoldier = cnt;
if ( pSoldier->sSectorX == gWorldSectorX && pSoldier->sSectorY == gWorldSectorY && pSoldier->bSectorZ == gbWorldSectorZ && pSoldier->stats.bLife > 0 && pSoldier->IsJamming( ) ) if ( pSoldier->sSectorX == gWorldSectorX && pSoldier->sSectorY == gWorldSectorY && pSoldier->bSectorZ == gbWorldSectorZ && pSoldier->stats.bLife > 0 && pSoldier->IsJamming( ) )
return TRUE; return TRUE;
} }
@@ -25347,10 +25350,11 @@ BOOLEAN PlayerTeamIsScanning( )
{ {
// check every soldier: are we jamming frequencies? // check every soldier: are we jamming frequencies?
SOLDIERTYPE* pSoldier = NULL; SOLDIERTYPE* pSoldier = NULL;
INT32 cnt = gTacticalStatus.Team[OUR_TEAM].bFirstID; SoldierID cnt = gTacticalStatus.Team[OUR_TEAM].bFirstID;
INT32 lastid = gTacticalStatus.Team[OUR_TEAM].bLastID; SoldierID lastid = gTacticalStatus.Team[OUR_TEAM].bLastID;
for ( pSoldier = MercPtrs[cnt]; cnt < lastid; ++cnt, ++pSoldier ) for ( ; cnt < lastid; ++cnt )
{ {
pSoldier = cnt;
if ( pSoldier->sSectorX == gWorldSectorX && pSoldier->sSectorY == gWorldSectorY && pSoldier->bSectorZ == gbWorldSectorZ && pSoldier->stats.bLife > 0 && pSoldier->IsScanning( ) ) if ( pSoldier->sSectorX == gWorldSectorX && pSoldier->sSectorY == gWorldSectorY && pSoldier->bSectorZ == gbWorldSectorZ && pSoldier->stats.bLife > 0 && pSoldier->IsScanning( ) )
return TRUE; return TRUE;
} }
@@ -25364,10 +25368,11 @@ UINT16 GridNoSpotterCTHBonus( SOLDIERTYPE* pSniper, INT32 sGridNo, INT8 bTeam )
UINT16 bestvalue = 0; UINT16 bestvalue = 0;
SOLDIERTYPE* pSoldier = NULL; SOLDIERTYPE* pSoldier = NULL;
INT32 cnt = gTacticalStatus.Team[bTeam].bFirstID; SoldierID cnt = gTacticalStatus.Team[bTeam].bFirstID;
INT32 lastid = gTacticalStatus.Team[bTeam].bLastID; SoldierID lastid = gTacticalStatus.Team[bTeam].bLastID;
for ( pSoldier = MercPtrs[cnt]; cnt < lastid; ++cnt, ++pSoldier ) for ( ; cnt < lastid; ++cnt )
{ {
pSoldier = cnt;
if ( pSoldier != pSniper && pSoldier->sSectorX == gWorldSectorX && pSoldier->sSectorY == gWorldSectorY && pSoldier->bSectorZ == gbWorldSectorZ if ( pSoldier != pSniper && pSoldier->sSectorX == gWorldSectorX && pSoldier->sSectorY == gWorldSectorY && pSoldier->bSectorZ == gbWorldSectorZ
&& pSoldier->IsSpotting( ) && pSoldier->IsSpotting( )
&& PythSpacesAway( pSoldier->sGridNo, pSniper->sGridNo ) <= gGameExternalOptions.usSpotterRange && PythSpacesAway( pSoldier->sGridNo, pSniper->sGridNo ) <= gGameExternalOptions.usSpotterRange
+14 -14
View File
@@ -574,7 +574,6 @@ INT16 gsStrategicDiseaseOriginSector = -1;
SOLDIERTYPE* TacticalCreateSoldier( SOLDIERCREATE_STRUCT *pCreateStruct, SoldierID *pubID ) SOLDIERTYPE* TacticalCreateSoldier( SOLDIERCREATE_STRUCT *pCreateStruct, SoldierID *pubID )
{ {
SOLDIERTYPE Soldier; SOLDIERTYPE Soldier;
INT32 cnt;
SOLDIERTYPE *pTeamSoldier; SOLDIERTYPE *pTeamSoldier;
BOOLEAN fGuyAvail = FALSE; BOOLEAN fGuyAvail = FALSE;
UINT16 bLastTeamID; UINT16 bLastTeamID;
@@ -761,7 +760,7 @@ SOLDIERTYPE* TacticalCreateSoldier( SOLDIERCREATE_STRUCT *pCreateStruct, Soldier
if( guiCurrentScreen != AUTORESOLVE_SCREEN ) if( guiCurrentScreen != AUTORESOLVE_SCREEN )
{ {
cnt = gTacticalStatus.Team[ Soldier.bTeam ].bFirstID; SoldierID cnt = gTacticalStatus.Team[ Soldier.bTeam ].bFirstID;
// ATE: If we are a vehicle, and a player, start at a different slot ( 2 - max ) // ATE: If we are a vehicle, and a player, start at a different slot ( 2 - max )
if( Soldier.ubBodyType == HUMVEE || if( Soldier.ubBodyType == HUMVEE ||
@@ -778,8 +777,9 @@ SOLDIERTYPE* TacticalCreateSoldier( SOLDIERCREATE_STRUCT *pCreateStruct, Soldier
bLastTeamID = gTacticalStatus.Team[ Soldier.bTeam ].bLastID; bLastTeamID = gTacticalStatus.Team[ Soldier.bTeam ].bLastID;
// look for all mercs on the same team, // look for all mercs on the same team,
for ( pTeamSoldier = MercPtrs[ cnt ]; cnt <= bLastTeamID; cnt++,pTeamSoldier++) for ( ; cnt <= bLastTeamID; ++cnt )
{ {
pTeamSoldier = cnt;
if ( !pTeamSoldier->bActive ) if ( !pTeamSoldier->bActive )
{ {
fGuyAvail = TRUE; fGuyAvail = TRUE;
@@ -794,7 +794,7 @@ SOLDIERTYPE* TacticalCreateSoldier( SOLDIERCREATE_STRUCT *pCreateStruct, Soldier
} }
// OK, set ID // OK, set ID
Soldier.ubID = (UINT16)cnt; Soldier.ubID = cnt;
*pubID = Soldier.ubID; *pubID = Soldier.ubID;
} }
@@ -3031,7 +3031,7 @@ void ForceSoldierProfileID( SOLDIERTYPE *pSoldier, UINT8 ubProfileID )
SOLDIERTYPE* ReserveTacticalSoldierForAutoresolve( UINT8 ubSoldierClass ) SOLDIERTYPE* ReserveTacticalSoldierForAutoresolve( UINT8 ubSoldierClass )
{ {
INT32 i, iStart, iEnd; SoldierID i, iStart, iEnd;
SOLDIERTYPE *pSoldier; SOLDIERTYPE *pSoldier;
//This code looks for a soldier of specified type that currently exists in tactical and //This code looks for a soldier of specified type that currently exists in tactical and
//returns the pointer to that soldier. This is used when copying the exact status of //returns the pointer to that soldier. This is used when copying the exact status of
@@ -3049,13 +3049,13 @@ SOLDIERTYPE* ReserveTacticalSoldierForAutoresolve( UINT8 ubSoldierClass )
iEnd = gTacticalStatus.Team[ CREATURE_TEAM ].bLastID; iEnd = gTacticalStatus.Team[ CREATURE_TEAM ].bLastID;
} }
for( i = iStart; i <= iEnd; ++i ) for( i = iStart; i <= iEnd; ++i )
{ {
if( MercPtrs[ i ]->bActive && MercPtrs[ i ]->bInSector && MercPtrs[ i ]->stats.bLife && !TileIsOutOfBounds(MercPtrs[ i ]->sGridNo)) if( i->bActive && i->bInSector && i->stats.bLife && !TileIsOutOfBounds(i->sGridNo))
{ {
if( MercPtrs[ i ]->ubSoldierClass == ubSoldierClass ) if( i->ubSoldierClass == ubSoldierClass )
{ {
//reserve this soldier //reserve this soldier
MercPtrs[ i ]->sGridNo = NOWHERE; i->sGridNo = NOWHERE;
//Allocate and copy the soldier //Allocate and copy the soldier
pSoldier = new SOLDIERTYPE(*MercPtrs[i]); //(SOLDIERTYPE*)MemAlloc( SIZEOF_SOLDIERTYPE ); pSoldier = new SOLDIERTYPE(*MercPtrs[i]); //(SOLDIERTYPE*)MemAlloc( SIZEOF_SOLDIERTYPE );
@@ -3348,7 +3348,7 @@ SOLDIERTYPE* TacticalCreateZombie()
SOLDIERTYPE* ReserveTacticalMilitiaSoldierForAutoresolve( UINT8 ubSoldierClass ) SOLDIERTYPE* ReserveTacticalMilitiaSoldierForAutoresolve( UINT8 ubSoldierClass )
{ {
INT32 i, iStart, iEnd; SoldierID i, iStart, iEnd;
SOLDIERTYPE *pSoldier; SOLDIERTYPE *pSoldier;
// For description look original ReserveTacticalSoldierForAutoresolve() // For description look original ReserveTacticalSoldierForAutoresolve()
@@ -3356,14 +3356,14 @@ SOLDIERTYPE* ReserveTacticalMilitiaSoldierForAutoresolve( UINT8 ubSoldierClass )
iStart = gTacticalStatus.Team[ MILITIA_TEAM ].bFirstID; iStart = gTacticalStatus.Team[ MILITIA_TEAM ].bFirstID;
iEnd = gTacticalStatus.Team[ MILITIA_TEAM ].bLastID; iEnd = gTacticalStatus.Team[ MILITIA_TEAM ].bLastID;
for( i = iStart; i <= iEnd; i++ ) for( i = iStart; i <= iEnd; ++i )
{ {
if( MercPtrs[ i ]->bActive && MercPtrs[ i ]->bInSector && MercPtrs[ i ]->stats.bLife && !TileIsOutOfBounds(MercPtrs[ i ]->sGridNo)) if( i->bActive && i->bInSector && i->stats.bLife && !TileIsOutOfBounds(i->sGridNo))
{ {
if( MercPtrs[ i ]->ubSoldierClass == ubSoldierClass ) if( i->ubSoldierClass == ubSoldierClass )
{ {
//reserve this soldier //reserve this soldier
MercPtrs[ i ]->sGridNo = NOWHERE; i->sGridNo = NOWHERE;
//Allocate and copy the soldier //Allocate and copy the soldier
pSoldier = new SOLDIERTYPE(*MercPtrs[i]); //(SOLDIERTYPE*)MemAlloc( SIZEOF_SOLDIERTYPE ); pSoldier = new SOLDIERTYPE(*MercPtrs[i]); //(SOLDIERTYPE*)MemAlloc( SIZEOF_SOLDIERTYPE );
+10 -8
View File
@@ -1891,9 +1891,9 @@ void AddSoldierInitListMilitia( UINT16 ubNumGreen, UINT16 ubNumRegs, UINT16 ubNu
{ {
// determine how many militia have already been created in this sector (this can also have happened in another function), so count all active ones // determine how many militia have already been created in this sector (this can also have happened in another function), so count all active ones
UINT16 tacticalmilitia = 0; UINT16 tacticalmilitia = 0;
for ( UINT16 i = gTacticalStatus.Team[MILITIA_TEAM].bFirstID; i <= gTacticalStatus.Team[MILITIA_TEAM ].bLastID; ++i ) for ( SoldierID i = gTacticalStatus.Team[MILITIA_TEAM].bFirstID; i <= gTacticalStatus.Team[MILITIA_TEAM ].bLastID; ++i )
{ {
if ( MercPtrs[i]->bInSector && MercPtrs[i]->bActive ) if ( i->bInSector && i->bActive )
++tacticalmilitia; ++tacticalmilitia;
} }
@@ -3205,10 +3205,11 @@ void SectorAddAssassins( INT16 sMapX, INT16 sMapY, INT16 sMapZ )
// count current number of civilians // count current number of civilians
UINT16 numberofcivs = 0; UINT16 numberofcivs = 0;
SOLDIERTYPE* pTeamSoldier = NULL; SOLDIERTYPE* pTeamSoldier = NULL;
INT32 cnt = gTacticalStatus.Team[ CIV_TEAM ].bFirstID; SoldierID cnt = gTacticalStatus.Team[ CIV_TEAM ].bFirstID;
INT32 lastid = gTacticalStatus.Team[ CIV_TEAM ].bLastID; SoldierID lastid = gTacticalStatus.Team[ CIV_TEAM ].bLastID;
for ( pTeamSoldier = MercPtrs[ cnt ]; cnt < lastid; ++cnt, ++pTeamSoldier) for ( ; cnt < lastid; ++cnt )
{ {
pTeamSoldier = cnt;
// check if teamsoldier exists in this sector // check if teamsoldier exists in this sector
if ( pTeamSoldier && pTeamSoldier->bActive && pTeamSoldier->bInSector && pTeamSoldier->sSectorX == sMapX && pTeamSoldier->sSectorY == sMapY && pTeamSoldier->bSectorZ == sMapZ ) if ( pTeamSoldier && pTeamSoldier->bActive && pTeamSoldier->bInSector && pTeamSoldier->sSectorX == sMapX && pTeamSoldier->sSectorY == sMapY && pTeamSoldier->bSectorZ == sMapZ )
++numberofcivs; ++numberofcivs;
@@ -3276,10 +3277,11 @@ void SectorAddPrisonersofWar( INT16 sMapX, INT16 sMapY, INT16 sMapZ )
UINT16 numberofcivs = 0; UINT16 numberofcivs = 0;
UINT16 numberofpows = 0; UINT16 numberofpows = 0;
SOLDIERTYPE* pTeamSoldier = NULL; SOLDIERTYPE* pTeamSoldier = NULL;
INT32 cnt = gTacticalStatus.Team[ CIV_TEAM ].bFirstID; SoldierID cnt = gTacticalStatus.Team[ CIV_TEAM ].bFirstID;
INT32 lastid = gTacticalStatus.Team[ CIV_TEAM ].bLastID; SoldierID lastid = gTacticalStatus.Team[ CIV_TEAM ].bLastID;
for ( pTeamSoldier = MercPtrs[ cnt ]; cnt < lastid; ++cnt, ++pTeamSoldier) for ( ; cnt < lastid; ++cnt )
{ {
pTeamSoldier = cnt;
// check if teamsoldier exists in this sector // check if teamsoldier exists in this sector
if ( pTeamSoldier && pTeamSoldier->bActive && pTeamSoldier->bInSector && pTeamSoldier->sSectorX == sMapX && pTeamSoldier->sSectorY == sMapY && pTeamSoldier->bSectorZ == sMapZ ) if ( pTeamSoldier && pTeamSoldier->bActive && pTeamSoldier->bInSector && pTeamSoldier->sSectorX == sMapX && pTeamSoldier->sSectorY == sMapY && pTeamSoldier->bSectorZ == sMapZ )
++numberofcivs; ++numberofcivs;
+6 -7
View File
@@ -2717,11 +2717,10 @@ void OverwriteMercOpinionsWithXMLData( UINT32 uiLoop )
// SANDRO - added function // SANDRO - added function
INT8 CheckMercsNearForCharTraits( UINT8 ubProfileID, INT8 bCharTraitID ) INT8 CheckMercsNearForCharTraits( UINT8 ubProfileID, INT8 bCharTraitID )
{ {
INT8 bNumber = 0; INT8 bNumber = 0;
UINT32 uiLoop; SOLDIERTYPE * pSoldier;
SOLDIERTYPE * pSoldier; SOLDIERTYPE *pTeammate;
SOLDIERTYPE * pTeammate; BOOLEAN fOnlyOneException = FALSE;
BOOLEAN fOnlyOneException = FALSE;
pSoldier = FindSoldierByProfileID( ubProfileID, FALSE ); pSoldier = FindSoldierByProfileID( ubProfileID, FALSE );
if (!pSoldier || !( pSoldier->bActive ) || !( pSoldier->bInSector ) ) if (!pSoldier || !( pSoldier->bActive ) || !( pSoldier->bInSector ) )
@@ -2729,9 +2728,9 @@ INT8 CheckMercsNearForCharTraits( UINT8 ubProfileID, INT8 bCharTraitID )
return( -1 ); return( -1 );
} }
for ( uiLoop = gTacticalStatus.Team[ pSoldier->bTeam ].bFirstID; uiLoop <= gTacticalStatus.Team[ pSoldier->bTeam ].bLastID; uiLoop++) for ( SoldierID uiLoop = gTacticalStatus.Team[ pSoldier->bTeam ].bFirstID; uiLoop <= gTacticalStatus.Team[ pSoldier->bTeam ].bLastID; ++uiLoop )
{ {
pTeammate = MercPtrs[ uiLoop ]; pTeammate = uiLoop;
if ( pTeammate == NULL ) if ( pTeammate == NULL )
{ {
continue; continue;
+3 -3
View File
@@ -397,17 +397,17 @@ void DoneFadeInWarp( void )
void DoneFadeOutWarpCallback( void ) void DoneFadeOutWarpCallback( void )
{ {
INT32 cnt;
SOLDIERTYPE *pSoldier; SOLDIERTYPE *pSoldier;
// Warp! // Warp!
// Set insertion data... // Set insertion data...
cnt = gTacticalStatus.Team[ gbPlayerNum ].bFirstID; SoldierID cnt = gTacticalStatus.Team[ gbPlayerNum ].bFirstID;
// look for all mercs on the same team, // look for all mercs on the same team,
for ( pSoldier = MercPtrs[ cnt ]; cnt <= gTacticalStatus.Team[ gbPlayerNum ].bLastID; cnt++,pSoldier++) for ( ; cnt <= gTacticalStatus.Team[ gbPlayerNum ].bLastID; ++cnt )
{ {
pSoldier = cnt;
// Are we in this sector, On the current squad? // Are we in this sector, On the current squad?
if ( pSoldier->bActive && pSoldier->stats.bLife >= OKLIFE && pSoldier->bInSector ) if ( pSoldier->bActive && pSoldier->stats.bLife >= OKLIFE && pSoldier->bInSector )
{ {
+15 -19
View File
@@ -119,7 +119,7 @@ void SaveNPCInformationToProfileStruct( );
BOOLEAN DoesTempFileExistsForMap( UINT32 uiType, INT16 sMapX, INT16 sMapY, INT8 bMapZ ); BOOLEAN DoesTempFileExistsForMap( UINT32 uiType, INT16 sMapX, INT16 sMapY, INT8 bMapZ );
INT16 GetSoldierIDFromAnyMercID(UINT8 ubMercID); SoldierID GetSoldierIDFromAnyMercID(UINT8 ubMercID);
BOOLEAN SetUnderGroundSectorFlag( INT16 sSectorX, INT16 sSectorY, UINT8 ubSectorZ, UINT32 uiFlagToSet ); BOOLEAN SetUnderGroundSectorFlag( INT16 sSectorX, INT16 sSectorY, UINT8 ubSectorZ, UINT32 uiFlagToSet );
@@ -1131,7 +1131,6 @@ BOOLEAN SaveCurrentSectorsInformationToTempItemFile( )
void HandleAllReachAbleItemsInTheSector( INT16 sSectorX, INT16 sSectorY, INT8 bSectorZ ) void HandleAllReachAbleItemsInTheSector( INT16 sSectorX, INT16 sSectorY, INT8 bSectorZ )
{ {
// find out which items in the list are reachable // find out which items in the list are reachable
UINT32 uiCounter = 0;
UINT8 ubDir, ubMovementCost; UINT8 ubDir, ubMovementCost;
BOOLEAN fReachable = FALSE; BOOLEAN fReachable = FALSE;
INT32 sGridNo = NOWHERE, sGridNo2 = NOWHERE; INT32 sGridNo = NOWHERE, sGridNo2 = NOWHERE;
@@ -1179,9 +1178,9 @@ void HandleAllReachAbleItemsInTheSector( INT16 sSectorX, INT16 sSectorY, INT8 bS
{ {
sGridNo2 = gMapInformation.sIsolatedGridNo; sGridNo2 = gMapInformation.sIsolatedGridNo;
for( uiCounter = gTacticalStatus.Team[ gbPlayerNum ].bFirstID; uiCounter <= gTacticalStatus.Team[ gbPlayerNum ].bLastID; ++uiCounter ) for( SoldierID uiCounter = gTacticalStatus.Team[ gbPlayerNum ].bFirstID; uiCounter <= gTacticalStatus.Team[ gbPlayerNum ].bLastID; ++uiCounter )
{ {
pSoldier = MercPtrs[ uiCounter ]; pSoldier = uiCounter;
if ( pSoldier && pSoldier->bActive && pSoldier->stats.bLife > 0 && pSoldier->sSectorX == sSectorX && pSoldier->sSectorY == sSectorY && pSoldier->bSectorZ == bSectorZ ) if ( pSoldier && pSoldier->bActive && pSoldier->stats.bLife > 0 && pSoldier->sSectorX == sSectorX && pSoldier->sSectorY == sSectorY && pSoldier->bSectorZ == bSectorZ )
{ {
if ( FindBestPath( pSoldier, sGridNo2, pSoldier->pathing.bLevel, WALKING, NO_COPYROUTE, 0 ) ) if ( FindBestPath( pSoldier, sGridNo2, pSoldier->pathing.bLevel, WALKING, NO_COPYROUTE, 0 ) )
@@ -1200,7 +1199,7 @@ void HandleAllReachAbleItemsInTheSector( INT16 sSectorX, INT16 sSectorY, INT8 bS
GlobalItemsReachableTest( sGridNo, sGridNo2 ); GlobalItemsReachableTest( sGridNo, sGridNo2 );
for( uiCounter = 0; uiCounter < guiNumWorldItems; ++uiCounter ) for( UINT32 uiCounter = 0; uiCounter < guiNumWorldItems; ++uiCounter )
{ {
// reset reachablity // reset reachablity
fReachable = FALSE; fReachable = FALSE;
@@ -2130,29 +2129,26 @@ BOOLEAN DoesTempFileExistsForMap( UINT32 uiType, INT16 sMapX, INT16 sMapY, INT8
} }
INT16 GetSoldierIDFromAnyMercID(UINT8 ubMercID) SoldierID GetSoldierIDFromAnyMercID(UINT8 ubMercID)
{ {
UINT16 cnt;
UINT16 ubLastTeamID;
SOLDIERTYPE *pTeamSoldier; SOLDIERTYPE *pTeamSoldier;
SoldierID cnt = gTacticalStatus.Team[OUR_TEAM].bFirstID;
SoldierID ubLastTeamID = TOTAL_SOLDIERS;
cnt = gTacticalStatus.Team[ OUR_TEAM ].bFirstID; // look for all mercs on the same team,
for ( ; cnt <= ubLastTeamID; ++cnt )
ubLastTeamID = TOTAL_SOLDIERS;
// look for all mercs on the same team,
for ( pTeamSoldier = MercPtrs[ cnt ]; cnt <= ubLastTeamID; cnt++,pTeamSoldier++)
{ {
if( pTeamSoldier->bActive ) pTeamSoldier = cnt;
if ( pTeamSoldier->bActive )
{ {
if ( pTeamSoldier->ubProfile == ubMercID ) if ( pTeamSoldier->ubProfile == ubMercID )
{ {
return( cnt ); return(cnt);
} }
} }
} }
return( -1 ); return(NOBODY);
} }
@@ -2554,9 +2550,9 @@ BOOLEAN SetSectorFlag( INT16 sMapX, INT16 sMapY, UINT8 bMapZ, UINT32 uiFlagToSet
UpdateLastDayOfPlayerActivity( (UINT16) GetWorldDay() ); UpdateLastDayOfPlayerActivity( (UINT16) GetWorldDay() );
} }
for ( UINT16 i = gTacticalStatus.Team[ gbPlayerNum ].bFirstID; i <= gTacticalStatus.Team[ gbPlayerNum ].bLastID; i++ ) for ( SoldierID id = gTacticalStatus.Team[ gbPlayerNum ].bFirstID; id <= gTacticalStatus.Team[ gbPlayerNum ].bLastID; ++id )
{ {
SOLDIERTYPE *pSoldier = MercPtrs[i]; SOLDIERTYPE *pSoldier = id;
if( pSoldier->bActive && pSoldier->stats.bLife && !(pSoldier->flags.uiStatusFlags & SOLDIER_VEHICLE) && pSoldier->ubProfile != NO_PROFILE && 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->sSectorX == sMapX && pSoldier->sSectorY == sMapY && pSoldier->bSectorZ == bMapZ && !pSoldier->flags.fBetweenSectors &&
+9 -8
View File
@@ -46,7 +46,6 @@ void HandleRPCDescription( )
UINT16 ubNumMercs = 0; UINT16 ubNumMercs = 0;
UINT16 ubChosenMerc = 0; UINT16 ubChosenMerc = 0;
SOLDIERTYPE *pTeamSoldier; SOLDIERTYPE *pTeamSoldier;
INT32 cnt2;
BOOLEAN fSAMSite = FALSE; BOOLEAN fSAMSite = FALSE;
@@ -97,12 +96,13 @@ void HandleRPCDescription( )
// OK, count how many rpc guys we have.... // OK, count how many rpc guys we have....
// set up soldier ptr as first element in mercptrs list // set up soldier ptr as first element in mercptrs list
cnt2 = gTacticalStatus.Team[ gbPlayerNum ].bFirstID; SoldierID cnt2 = gTacticalStatus.Team[ gbPlayerNum ].bFirstID;
if (gTacticalStatus.ubGuideDescriptionToUse != 100) if (gTacticalStatus.ubGuideDescriptionToUse != 100)
{ {
// run through list // run through list
for ( pTeamSoldier = MercPtrs[cnt2]; cnt2 <= gTacticalStatus.Team[gbPlayerNum].bLastID; ++cnt2, pTeamSoldier++ ) for ( ; cnt2 <= gTacticalStatus.Team[gbPlayerNum].bLastID; ++cnt2 )
{ {
pTeamSoldier = cnt2;
// Add guy if he's a candidate... // Add guy if he's a candidate...
if ( RPC_RECRUITED( pTeamSoldier ) ) if ( RPC_RECRUITED( pTeamSoldier ) )
{ {
@@ -137,8 +137,9 @@ void HandleRPCDescription( )
{ {
// run through list // run through list
cnt2 = gTacticalStatus.Team[gbPlayerNum].bFirstID; cnt2 = gTacticalStatus.Team[gbPlayerNum].bFirstID;
for ( pTeamSoldier = MercPtrs[cnt2]; cnt2 <= gTacticalStatus.Team[gbPlayerNum].bLastID; ++cnt2, pTeamSoldier++ ) for ( ; cnt2 <= gTacticalStatus.Team[gbPlayerNum].bLastID; ++cnt2 )
{ {
pTeamSoldier = cnt2;
if ( pTeamSoldier->stats.bLife >= OKLIFE && pTeamSoldier->bActive && if ( pTeamSoldier->stats.bLife >= OKLIFE && pTeamSoldier->bActive &&
pTeamSoldier->sSectorX == gTacticalStatus.bGuideDescriptionSectorX && pTeamSoldier->sSectorY == gTacticalStatus.bGuideDescriptionSectorY && pTeamSoldier->sSectorX == gTacticalStatus.bGuideDescriptionSectorX && pTeamSoldier->sSectorY == gTacticalStatus.bGuideDescriptionSectorY &&
pTeamSoldier->bSectorZ == gbWorldSectorZ && pTeamSoldier->bSectorZ == gbWorldSectorZ &&
@@ -154,7 +155,6 @@ void HandleRPCDescription( )
void HandleTacticalEndTurn( ) void HandleTacticalEndTurn( )
{ {
UINT32 cnt;
SOLDIERTYPE *pSoldier; SOLDIERTYPE *pSoldier;
UINT32 uiTime; UINT32 uiTime;
static UINT32 uiTimeSinceLastStrategicUpdate = 0; static UINT32 uiTimeSinceLastStrategicUpdate = 0;
@@ -239,9 +239,10 @@ void HandleTacticalEndTurn( )
BeginLoggingForBleedMeToos( TRUE ); BeginLoggingForBleedMeToos( TRUE );
cnt = gTacticalStatus.Team[ gbPlayerNum ].bFirstID; SoldierID cnt = gTacticalStatus.Team[ gbPlayerNum ].bFirstID;
for ( pSoldier = MercPtrs[ cnt ]; cnt <= gTacticalStatus.Team[ gbPlayerNum ].bLastID; cnt++,pSoldier++) for ( ; cnt <= gTacticalStatus.Team[ gbPlayerNum ].bLastID; ++cnt )
{ {
pSoldier = cnt;
if ( pSoldier->bActive && pSoldier->stats.bLife > 0 && !( pSoldier->flags.uiStatusFlags & SOLDIER_VEHICLE ) ) if ( pSoldier->bActive && pSoldier->stats.bLife > 0 && !( pSoldier->flags.uiStatusFlags & SOLDIER_VEHICLE ) )
{ {
// Handle everything from getting breath back, to bleeding, etc // Handle everything from getting breath back, to bleeding, etc
@@ -275,7 +276,7 @@ void HandleTacticalEndTurn( )
// OK, loop through the mercs to perform 'end turn' events on each... // OK, loop through the mercs to perform 'end turn' events on each...
// We're looping through only mercs in tactical engine, ignoring our mercs // We're looping through only mercs in tactical engine, ignoring our mercs
// because they were done earilier... // because they were done earilier...
for ( cnt = 0; cnt < guiNumMercSlots; cnt++ ) for ( UINT32 cnt = 0; cnt < guiNumMercSlots; cnt++ )
{ {
pSoldier = MercSlots[ cnt ]; pSoldier = MercSlots[ cnt ];
+87 -90
View File
@@ -136,8 +136,7 @@ void ClearIntList( void )
BOOLEAN BloodcatsPresent( void ) BOOLEAN BloodcatsPresent( void )
{ {
INT32 iLoop; SOLDIERTYPE *pSoldier;
SOLDIERTYPE * pSoldier;
DebugMsg (TOPIC_JA2INTERRUPT,DBG_LEVEL_3,"BloodcatsPresent"); DebugMsg (TOPIC_JA2INTERRUPT,DBG_LEVEL_3,"BloodcatsPresent");
if ( gTacticalStatus.Team[ CREATURE_TEAM ].bTeamActive == FALSE ) if ( gTacticalStatus.Team[ CREATURE_TEAM ].bTeamActive == FALSE )
@@ -145,9 +144,9 @@ BOOLEAN BloodcatsPresent( void )
return( FALSE ); return( FALSE );
} }
for ( iLoop = gTacticalStatus.Team[ CREATURE_TEAM ].bFirstID; iLoop <= gTacticalStatus.Team[ CREATURE_TEAM ].bLastID; iLoop++ ) for ( SoldierID iLoop = gTacticalStatus.Team[ CREATURE_TEAM ].bFirstID; iLoop <= gTacticalStatus.Team[ CREATURE_TEAM ].bLastID; ++iLoop )
{ {
pSoldier = MercPtrs[ iLoop ]; pSoldier = iLoop;
if ( pSoldier->bActive && pSoldier->bInSector && pSoldier->stats.bLife > 0 && pSoldier->ubBodyType == BLOODCAT ) if ( pSoldier->bActive && pSoldier->bInSector && pSoldier->stats.bLife > 0 && pSoldier->ubBodyType == BLOODCAT )
{ {
@@ -160,7 +159,6 @@ BOOLEAN BloodcatsPresent( void )
void StartPlayerTeamTurn( BOOLEAN fDoBattleSnd, BOOLEAN fEnteringCombatMode ) void StartPlayerTeamTurn( BOOLEAN fDoBattleSnd, BOOLEAN fEnteringCombatMode )
{ {
INT32 cnt;
DebugMsg (TOPIC_JA2INTERRUPT,DBG_LEVEL_3,"StartPlayerTeamTurn"); DebugMsg (TOPIC_JA2INTERRUPT,DBG_LEVEL_3,"StartPlayerTeamTurn");
// SOLDIERTYPE *pSoldier; // SOLDIERTYPE *pSoldier;
// EV_S_BEGINTURN SBeginTurn; // EV_S_BEGINTURN SBeginTurn;
@@ -178,8 +176,6 @@ void StartPlayerTeamTurn( BOOLEAN fDoBattleSnd, BOOLEAN fEnteringCombatMode )
// make sure set properly in gTacticalStatus: // make sure set properly in gTacticalStatus:
gTacticalStatus.ubCurrentTeam = OUR_TEAM; gTacticalStatus.ubCurrentTeam = OUR_TEAM;
cnt = gTacticalStatus.Team[ gbPlayerNum ].bFirstID;
InitPlayerUIBar( FALSE ); InitPlayerUIBar( FALSE );
if ( gTacticalStatus.uiFlags & TURNBASED ) if ( gTacticalStatus.uiFlags & TURNBASED )
@@ -197,6 +193,7 @@ void StartPlayerTeamTurn( BOOLEAN fDoBattleSnd, BOOLEAN fEnteringCombatMode )
// ATE: Commented out - looks like this message is called earlier for our team // ATE: Commented out - looks like this message is called earlier for our team
// look for all mercs on the same team, // look for all mercs on the same team,
//SoldierID cnt = gTacticalStatus.Team[ gbPlayerNum ].bFirstID;
//for ( pSoldier = MercPtrs[ cnt ]; cnt <= gTacticalStatus.Team[ gbPlayerNum ].bLastID; cnt++,pSoldier++) //for ( pSoldier = MercPtrs[ cnt ]; cnt <= gTacticalStatus.Team[ gbPlayerNum ].bLastID; cnt++,pSoldier++)
//{ //{
// if ( pSoldier->bActive && pSoldier->stats.bLife > 0 ) // if ( pSoldier->bActive && pSoldier->stats.bLife > 0 )
@@ -302,7 +299,6 @@ void EndTurn( UINT8 ubNextTeam )
{ {
DebugMsg (TOPIC_JA2INTERRUPT,DBG_LEVEL_3,"EndTurn"); DebugMsg (TOPIC_JA2INTERRUPT,DBG_LEVEL_3,"EndTurn");
SOLDIERTYPE * pSoldier; SOLDIERTYPE * pSoldier;
INT32 cnt;
//Check for enemy pooling (add enemies if there happens to be more than the max in the //Check for enemy pooling (add enemies if there happens to be more than the max in the
//current battle. If one or more slots have freed up, we can add them now. //current battle. If one or more slots have freed up, we can add them now.
@@ -344,9 +340,10 @@ void EndTurn( UINT8 ubNextTeam )
FreezeInterfaceForEnemyTurn(); FreezeInterfaceForEnemyTurn();
// Loop through all mercs and set to moved // Loop through all mercs and set to moved
cnt = gTacticalStatus.Team[ gTacticalStatus.ubCurrentTeam ].bFirstID; SoldierID cnt = gTacticalStatus.Team[ gTacticalStatus.ubCurrentTeam ].bFirstID;
for ( pSoldier = MercPtrs[ cnt ]; cnt <= gTacticalStatus.Team[ gTacticalStatus.ubCurrentTeam ].bLastID; cnt++,pSoldier++) for ( ; cnt <= gTacticalStatus.Team[ gTacticalStatus.ubCurrentTeam ].bLastID; ++cnt )
{ {
pSoldier = cnt;
if ( pSoldier->bActive ) if ( pSoldier->bActive )
{ {
pSoldier->aiData.bMoved = TRUE; pSoldier->aiData.bMoved = TRUE;
@@ -380,7 +377,6 @@ void EndAITurn( void )
{ {
DebugMsg (TOPIC_JA2INTERRUPT,DBG_LEVEL_3,"EndAITurn"); DebugMsg (TOPIC_JA2INTERRUPT,DBG_LEVEL_3,"EndAITurn");
SOLDIERTYPE * pSoldier; SOLDIERTYPE * pSoldier;
INT32 cnt;
// Remove any deadlock message // Remove any deadlock message
EndDeadlockMsg( ); EndDeadlockMsg( );
@@ -395,9 +391,10 @@ void EndAITurn( void )
} }
else else
{ {
cnt = gTacticalStatus.Team[ gTacticalStatus.ubCurrentTeam ].bFirstID; SoldierID cnt = gTacticalStatus.Team[ gTacticalStatus.ubCurrentTeam ].bFirstID;
for ( pSoldier = MercPtrs[ cnt ]; cnt <= gTacticalStatus.Team[ gTacticalStatus.ubCurrentTeam ].bLastID; cnt++,pSoldier++) for ( ; cnt <= gTacticalStatus.Team[ gTacticalStatus.ubCurrentTeam ].bLastID; ++cnt )
{ {
pSoldier = cnt;
if ( pSoldier->bActive ) if ( pSoldier->bActive )
{ {
pSoldier->aiData.bMoved = TRUE; pSoldier->aiData.bMoved = TRUE;
@@ -417,7 +414,6 @@ void EndAllAITurns( void )
DebugMsg (TOPIC_JA2INTERRUPT,DBG_LEVEL_3,"EndAllAITurns"); DebugMsg (TOPIC_JA2INTERRUPT,DBG_LEVEL_3,"EndAllAITurns");
// warp turn to the player's turn // warp turn to the player's turn
SOLDIERTYPE * pSoldier; SOLDIERTYPE * pSoldier;
INT32 cnt;
// Remove any deadlock message // Remove any deadlock message
EndDeadlockMsg( ); EndDeadlockMsg( );
@@ -428,9 +424,10 @@ void EndAllAITurns( void )
if ( gTacticalStatus.ubCurrentTeam != gbPlayerNum ) if ( gTacticalStatus.ubCurrentTeam != gbPlayerNum )
{ {
cnt = gTacticalStatus.Team[ gTacticalStatus.ubCurrentTeam ].bFirstID; SoldierID id = gTacticalStatus.Team[ gTacticalStatus.ubCurrentTeam ].bFirstID;
for ( pSoldier = MercPtrs[ cnt ]; cnt <= gTacticalStatus.Team[ gTacticalStatus.ubCurrentTeam ].bLastID; cnt++,pSoldier++) for ( ; id <= gTacticalStatus.Team[ gTacticalStatus.ubCurrentTeam ].bLastID; ++id )
{ {
pSoldier = id;
if ( pSoldier->bActive ) if ( pSoldier->bActive )
{ {
pSoldier->aiData.bMoved = TRUE; pSoldier->aiData.bMoved = TRUE;
@@ -463,9 +460,10 @@ void EndTurnEvents( void )
DecaySmokeEffects( GetWorldTotalSeconds( ) ); DecaySmokeEffects( GetWorldTotalSeconds( ) );
SOLDIERTYPE* pSoldier = NULL; SOLDIERTYPE* pSoldier = NULL;
UINT32 cnt = gTacticalStatus.Team[ gbPlayerNum ].bFirstID; SoldierID id = gTacticalStatus.Team[ gbPlayerNum ].bFirstID;
for ( pSoldier = MercPtrs[ cnt ]; cnt <= gTacticalStatus.Team[ gbPlayerNum ].bLastID; ++cnt, ++pSoldier) for ( ; id <= gTacticalStatus.Team[ gbPlayerNum ].bLastID; ++id )
{ {
pSoldier = id;
if ( pSoldier->bActive && pSoldier->stats.bLife > 0 )//&& !( pSoldier->flags.uiStatusFlags & SOLDIER_VEHICLE ) && !( AM_A_ROBOT( pSoldier ) ) ) if ( pSoldier->bActive && pSoldier->stats.bLife > 0 )//&& !( pSoldier->flags.uiStatusFlags & SOLDIER_VEHICLE ) && !( AM_A_ROBOT( pSoldier ) ) )
{ {
// Flugente: update multi-turn actions // Flugente: update multi-turn actions
@@ -505,8 +503,6 @@ BOOLEAN LightningEndOfTurn( UINT8 ubTeam );
void BeginTeamTurn( UINT8 ubTeam ) void BeginTeamTurn( UINT8 ubTeam )
{ {
DebugMsg (TOPIC_JA2INTERRUPT,DBG_LEVEL_3,"BeginTeamTurn"); DebugMsg (TOPIC_JA2INTERRUPT,DBG_LEVEL_3,"BeginTeamTurn");
INT32 cnt;
SoldierID ubID;
SOLDIERTYPE *pSoldier; SOLDIERTYPE *pSoldier;
//rain //rain
@@ -573,9 +569,10 @@ void BeginTeamTurn( UINT8 ubTeam )
// decay team's public opplist // decay team's public opplist
DecayPublicOpplist( ubTeam ); DecayPublicOpplist( ubTeam );
cnt = gTacticalStatus.Team[ ubTeam ].bFirstID; SoldierID id = gTacticalStatus.Team[ ubTeam ].bFirstID;
for ( pSoldier = MercPtrs[ cnt ]; cnt <= gTacticalStatus.Team[ ubTeam ].bLastID; cnt++,pSoldier++) for ( ; id <= gTacticalStatus.Team[ ubTeam ].bLastID; ++id )
{ {
pSoldier = id;
if ( pSoldier->bActive && pSoldier->stats.bLife > 0) if ( pSoldier->bActive && pSoldier->stats.bLife > 0)
{ {
// decay personal opplist, and refresh APs and BPs // decay personal opplist, and refresh APs and BPs
@@ -644,7 +641,7 @@ void BeginTeamTurn( UINT8 ubTeam )
if ( BuildAIListForTeam( ubTeam ) ) if ( BuildAIListForTeam( ubTeam ) )
{ {
ubID = RemoveFirstAIListEntry(); SoldierID ubID = RemoveFirstAIListEntry();
if (ubID != NOBODY) if (ubID != NOBODY)
{ {
// Dirty panel interface! // Dirty panel interface!
@@ -810,12 +807,12 @@ BOOLEAN EveryoneInInterruptListOnSameTeam( void )
void StartInterrupt( void ) void StartInterrupt( void )
{ {
UINT16 ubFirstInterrupter; INT8 bTeam;
INT8 bTeam; SOLDIERTYPE *pSoldier;
SOLDIERTYPE * pSoldier; SOLDIERTYPE *pTempSoldier;
SOLDIERTYPE * pTempSoldier; SoldierID ubFirstInterrupter;
UINT16 ubInterrupter; SoldierID ubInterrupter;
INT32 cnt; INT32 cnt;
DebugMsg (TOPIC_JA2INTERRUPT,DBG_LEVEL_3,"StartInterrupt"); DebugMsg (TOPIC_JA2INTERRUPT,DBG_LEVEL_3,"StartInterrupt");
ubFirstInterrupter = LATEST_INTERRUPT_GUY; ubFirstInterrupter = LATEST_INTERRUPT_GUY;
@@ -837,9 +834,9 @@ void StartInterrupt( void )
gTacticalStatus.fInterruptOccurred = TRUE; gTacticalStatus.fInterruptOccurred = TRUE;
cnt = 0; for ( SoldierID id = 0; id < MAX_NUM_SOLDIERS; ++id )
for ( pTempSoldier = MercPtrs[ cnt ]; cnt < MAX_NUM_SOLDIERS; cnt++,pTempSoldier++)
{ {
pTempSoldier = id;
if ( pTempSoldier->bActive ) if ( pTempSoldier->bActive )
{ {
pTempSoldier->bMovedPriorToInterrupt = pTempSoldier->aiData.bMoved; pTempSoldier->bMovedPriorToInterrupt = pTempSoldier->aiData.bMoved;
@@ -862,7 +859,7 @@ void StartInterrupt( void )
//while( 1 ) //while( 1 )
for( iCounter = 0; iCounter < MAX_NUM_SOLDIERS; iCounter++ ) for( iCounter = 0; iCounter < MAX_NUM_SOLDIERS; iCounter++ )
{ {
MercPtrs[ubInterrupter]->aiData.bMoved = FALSE; ubInterrupter->aiData.bMoved = FALSE;
DebugMsg( TOPIC_JA2INTERRUPT, DBG_LEVEL_3, String("INTERRUPT: popping %d off of the interrupt queue", ubInterrupter ) ); DebugMsg( TOPIC_JA2INTERRUPT, DBG_LEVEL_3, String("INTERRUPT: popping %d off of the interrupt queue", ubInterrupter ) );
REMOVE_LATEST_INTERRUPT_GUY(); REMOVE_LATEST_INTERRUPT_GUY();
@@ -873,7 +870,7 @@ void StartInterrupt( void )
{ {
continue; continue;
} }
else if (MercPtrs[ubInterrupter]->bTeam != bTeam) else if (ubInterrupter->bTeam != bTeam)
{ {
break; break;
} }
@@ -891,7 +888,7 @@ void StartInterrupt( void )
handleInterrupt = FALSE; handleInterrupt = FALSE;
// build string in separate loop here, want to linearly process squads... // build string in separate loop here, want to linearly process squads...
SOLDIERTYPE *pInterruptedSoldier = MercPtrs[ubInterrupter]; SOLDIERTYPE *pInterruptedSoldier = ubInterrupter;
for ( iSquad = 0; iSquad < NUMBER_OF_SQUADS; iSquad++ ) for ( iSquad = 0; iSquad < NUMBER_OF_SQUADS; iSquad++ )
{ {
for ( iCounter = 0; iCounter < NUMBER_OF_SOLDIERS_PER_SQUAD; iCounter++ ) for ( iCounter = 0; iCounter < NUMBER_OF_SOLDIERS_PER_SQUAD; iCounter++ )
@@ -981,9 +978,9 @@ void StartInterrupt( void )
PlayJA2Sample( ENDTURN_1, RATE_11025, MIDVOLUME, 1, MIDDLEPAN ); PlayJA2Sample( ENDTURN_1, RATE_11025, MIDVOLUME, 1, MIDDLEPAN );
// report any close call quotes for us here // report any close call quotes for us here
for ( iCounter = gTacticalStatus.Team[ gbPlayerNum ].bFirstID; iCounter <= gTacticalStatus.Team[ gbPlayerNum ].bLastID; iCounter++ ) for ( SoldierID id = gTacticalStatus.Team[ gbPlayerNum ].bFirstID; id <= gTacticalStatus.Team[ gbPlayerNum ].bLastID; ++id )
{ {
SOLDIERTYPE *pSoldier = MercPtrs[iCounter]; SOLDIERTYPE *pSoldier = id;
if ( OK_INSECTOR_MERC( pSoldier ) ) if ( OK_INSECTOR_MERC( pSoldier ) )
{ {
@@ -1022,7 +1019,7 @@ void StartInterrupt( void )
UINT16 usCounter; UINT16 usCounter;
for( usCounter = 0; usCounter < MAX_NUM_SOLDIERS; usCounter++ ) for( usCounter = 0; usCounter < MAX_NUM_SOLDIERS; usCounter++ )
{ {
MercPtrs[ubInterrupter]->aiData.bMoved = FALSE; ubInterrupter->aiData.bMoved = FALSE;
DebugMsg( TOPIC_JA2INTERRUPT, DBG_LEVEL_3, String("INTERRUPT: popping %d off of the interrupt queue", ubInterrupter ) ); DebugMsg( TOPIC_JA2INTERRUPT, DBG_LEVEL_3, String("INTERRUPT: popping %d off of the interrupt queue", ubInterrupter ) );
@@ -1033,7 +1030,7 @@ void StartInterrupt( void )
{ {
continue; continue;
} }
else if (MercPtrs[ubInterrupter]->bTeam != bTeam) else if (ubInterrupter->bTeam != bTeam)
{ {
break; break;
} }
@@ -1047,12 +1044,12 @@ void StartInterrupt( void )
BuildAIListForTeam( bTeam ); BuildAIListForTeam( bTeam );
// set to the new first interrupter // set to the new first interrupter
cnt = RemoveFirstAIListEntry(); SoldierID id = RemoveFirstAIListEntry();
// sevenfm: RemoveFirstAIListEntry() can return NOBODY // sevenfm: RemoveFirstAIListEntry() can return NOBODY
if( cnt != NOBODY ) if( id != NOBODY )
{ {
pTempSoldier = MercPtrs[ cnt ]; pTempSoldier = id;
// sevenfm: don't do anything if pTempSoldier is NULL // sevenfm: don't do anything if pTempSoldier is NULL
if( pTempSoldier != NULL ) if( pTempSoldier != NULL )
@@ -1117,16 +1114,15 @@ void StartInterrupt( void )
void EndInterrupt( BOOLEAN fMarkInterruptOccurred ) void EndInterrupt( BOOLEAN fMarkInterruptOccurred )
{ {
UINT16 ubInterruptedSoldier; SoldierID ubInterruptedSoldier;
SOLDIERTYPE * pSoldier; SOLDIERTYPE *pSoldier;
SOLDIERTYPE * pTempSoldier; SOLDIERTYPE *pTempSoldier;
INT32 cnt; BOOLEAN fFound;
BOOLEAN fFound; INT16 ubMinAPsToAttack;
INT16 ubMinAPsToAttack;
DebugMsg (TOPIC_JA2INTERRUPT,DBG_LEVEL_3,"EndInterrupt"); DebugMsg (TOPIC_JA2INTERRUPT,DBG_LEVEL_3,"EndInterrupt");
for ( cnt = gubOutOfTurnPersons; cnt > 0; cnt-- ) for ( UINT16 cnt = gubOutOfTurnPersons; cnt > 0; cnt-- )
{ {
DebugMsg( TOPIC_JA2INTERRUPT, DBG_LEVEL_3, String("ENDINT: Q position %d: %d", cnt, gubOutOfTurnOrder[ cnt ] ) ); DebugMsg( TOPIC_JA2INTERRUPT, DBG_LEVEL_3, String("ENDINT: Q position %d: %d", cnt, gubOutOfTurnOrder[ cnt ] ) );
} }
@@ -1144,9 +1140,10 @@ void EndInterrupt( BOOLEAN fMarkInterruptOccurred )
} }
// Loop through all mercs and see if any passed on this interrupt // Loop through all mercs and see if any passed on this interrupt
cnt = gTacticalStatus.Team[ gTacticalStatus.ubCurrentTeam ].bFirstID; SoldierID id = gTacticalStatus.Team[ gTacticalStatus.ubCurrentTeam ].bFirstID;
for ( pTempSoldier = MercPtrs[ cnt ]; cnt <= gTacticalStatus.Team[ gTacticalStatus.ubCurrentTeam ].bLastID; cnt++,pTempSoldier++) for ( ; id <= gTacticalStatus.Team[ gTacticalStatus.ubCurrentTeam ].bLastID; ++id )
{ {
pTempSoldier = id;
if ( pTempSoldier->bActive && pTempSoldier->bInSector && !pTempSoldier->aiData.bMoved && (pTempSoldier->bActionPoints == pTempSoldier->aiData.bIntStartAPs)) if ( pTempSoldier->bActive && pTempSoldier->bInSector && !pTempSoldier->aiData.bMoved && (pTempSoldier->bActionPoints == pTempSoldier->aiData.bIntStartAPs))
{ {
ubMinAPsToAttack = MinAPsToAttack( pTempSoldier, pTempSoldier->sLastTarget, FALSE, 0 ); ubMinAPsToAttack = MinAPsToAttack( pTempSoldier, pTempSoldier->sLastTarget, FALSE, 0 );
@@ -1163,58 +1160,58 @@ void EndInterrupt( BOOLEAN fMarkInterruptOccurred )
// resume interrupted interrupt // resume interrupted interrupt
//hayden //hayden
if (!is_networked) if ( !is_networked )
{ {
StartInterrupt(); StartInterrupt();
} }
else else
{ {
UINT16 nubFirstInterrupter; SoldierID nubFirstInterrupter;
INT8 nbTeam; INT8 nbTeam;
SOLDIERTYPE * npSoldier; SOLDIERTYPE *npSoldier;
nubFirstInterrupter = LATEST_INTERRUPT_GUY; nubFirstInterrupter = LATEST_INTERRUPT_GUY;
npSoldier = MercPtrs[nubFirstInterrupter]; npSoldier = nubFirstInterrupter;
nbTeam = npSoldier->bTeam; nbTeam = npSoldier->bTeam;
//pSoldier is interrupted //but its not available //needs calculating //pSoldier is interrupted //but its not available //needs calculating
//npSoldier,nbTeam is interruptor //npSoldier,nbTeam is interruptor
//hayden //hayden
#ifdef BETAVERSION #ifdef BETAVERSION
ScreenMsg( FONT_MCOLOR_LTYELLOW, MSG_INTERFACE, L"unchecked interrupt call area:(resume interrupted interrupt)..."); ScreenMsg( FONT_MCOLOR_LTYELLOW, MSG_INTERFACE, L"unchecked interrupt call area:(resume interrupted interrupt)..." );
#endif #endif
if ((nbTeam > 0) && (nbTeam <6 ) && is_server) // AI interrupt resume and im server if ( (nbTeam > 0) && (nbTeam < 6) && is_server ) // AI interrupt resume and im server
{ {
send_interrupt( npSoldier ); send_interrupt( npSoldier );
StartInterrupt(); StartInterrupt();
ScreenMsg( FONT_MCOLOR_LTYELLOW, MSG_INTERFACE, L"Continuing interrupt with %s and AI", TeamNameStrings[npSoldier->bTeam]);//tried to use pSoldier, but its not available. find another way to get correct team ScreenMsg( FONT_MCOLOR_LTYELLOW, MSG_INTERFACE, L"Continuing interrupt with %s and AI", TeamNameStrings[npSoldier->bTeam] );//tried to use pSoldier, but its not available. find another way to get correct team
} }
else if(is_server && gTacticalStatus.ubCurrentTeam == 1)// resume AI interrupted and im server else if ( is_server && gTacticalStatus.ubCurrentTeam == 1 )// resume AI interrupted and im server
{ {
//hayden //hayden
send_interrupt( npSoldier ); send_interrupt( npSoldier );
if(nbTeam !=0) if ( nbTeam != 0 )
intAI(npSoldier); intAI( npSoldier );
else else
StartInterrupt(); StartInterrupt();
ScreenMsg( FONT_MCOLOR_LTYELLOW, MSG_INTERFACE, L"Continuing interrupt of AI by %s", TeamNameStrings[npSoldier->bTeam]); ScreenMsg( FONT_MCOLOR_LTYELLOW, MSG_INTERFACE, L"Continuing interrupt of AI by %s", TeamNameStrings[npSoldier->bTeam] );
} }
#ifdef INTERRUPT_MP_DEADLOCK_FIX #ifdef INTERRUPT_MP_DEADLOCK_FIX
//its our turn//else// pure client awarding interrupt resume //its our turn //its our turn//else// pure client awarding interrupt resume //its our turn
else if(gTacticalStatus.ubCurrentTeam == 0) else if ( gTacticalStatus.ubCurrentTeam == 0 )
#else #else
// pure client awarding interrupt resume // pure client awarding interrupt resume
else else
#endif #endif
{ {
ScreenMsg( FONT_MCOLOR_LTYELLOW, MSG_INTERFACE, L"Continuing interrupt with %s", TeamNameStrings[npSoldier->bTeam]);//this can be simplified if above comment is implemented ScreenMsg( FONT_MCOLOR_LTYELLOW, MSG_INTERFACE, L"Continuing interrupt with %s", TeamNameStrings[npSoldier->bTeam] );//this can be simplified if above comment is implemented
//ClearIntList(); //ClearIntList();
//hayden//may need more work. //hayden//may need more work.
StartInterrupt(); StartInterrupt();
@@ -1228,11 +1225,11 @@ void EndInterrupt( BOOLEAN fMarkInterruptOccurred )
DebugMsg( TOPIC_JA2INTERRUPT, DBG_LEVEL_3, String("INTERRUPT: interrupt over, %d's team regains control", ubInterruptedSoldier ) ); DebugMsg( TOPIC_JA2INTERRUPT, DBG_LEVEL_3, String("INTERRUPT: interrupt over, %d's team regains control", ubInterruptedSoldier ) );
pSoldier = MercPtrs[ubInterruptedSoldier]; pSoldier = ubInterruptedSoldier;
cnt = 0; for ( SoldierID id = 0; id < MAX_NUM_SOLDIERS; ++id)
for ( pTempSoldier = MercPtrs[ cnt ]; cnt < MAX_NUM_SOLDIERS; cnt++,pTempSoldier++)
{ {
pTempSoldier = id;
if ( pTempSoldier->bActive ) if ( pTempSoldier->bActive )
{ {
// AI guys only here... // AI guys only here...
@@ -1371,9 +1368,10 @@ void EndInterrupt( BOOLEAN fMarkInterruptOccurred )
fFound = FALSE; fFound = FALSE;
// rebuild list for this team if anyone on the team is still available // rebuild list for this team if anyone on the team is still available
cnt = gTacticalStatus.Team[ ENEMY_TEAM ].bFirstID; SoldierID id = gTacticalStatus.Team[ ENEMY_TEAM ].bFirstID;
for ( pTempSoldier = MercPtrs[ cnt ]; cnt <= gTacticalStatus.Team[ gTacticalStatus.ubCurrentTeam ].bLastID; cnt++,pTempSoldier++) for ( ; id <= gTacticalStatus.Team[ gTacticalStatus.ubCurrentTeam ].bLastID; ++id )
{ {
pTempSoldier = id;
if ( pTempSoldier->bActive && pTempSoldier->bInSector && pTempSoldier->stats.bLife >= OKLIFE ) if ( pTempSoldier->bActive && pTempSoldier->bInSector && pTempSoldier->stats.bLife >= OKLIFE )
{ {
fFound = TRUE; fFound = TRUE;
@@ -1390,16 +1388,16 @@ void EndInterrupt( BOOLEAN fMarkInterruptOccurred )
{ {
// now bubble up everyone left in the interrupt queue, starting // now bubble up everyone left in the interrupt queue, starting
// at the front of the array // at the front of the array
for (cnt = 1; cnt <= gubOutOfTurnPersons; cnt++) for (UINT16 cnt = 1; cnt <= gubOutOfTurnPersons; cnt++)
{ {
MoveToFrontOfAIList( gubOutOfTurnOrder[ cnt ] ); MoveToFrontOfAIList( gubOutOfTurnOrder[ cnt ] );
} }
cnt = RemoveFirstAIListEntry(); SoldierID id = RemoveFirstAIListEntry();
if (cnt != NOBODY) if (id != NOBODY)
{ {
fFound = TRUE; fFound = TRUE;
StartNPCAI( MercPtrs[ cnt ] ); StartNPCAI( id );
} }
} }
@@ -2382,7 +2380,7 @@ void ResolveInterruptsVs( SOLDIERTYPE * pSoldier, UINT8 ubInterruptType)
{ {
DebugMsg (TOPIC_JA2INTERRUPT,DBG_LEVEL_3,String("ResolveInterruptsVs: Soldier ID = %d, APs = %d (interrupt type = %d)",pSoldier->ubID,pSoldier->bActionPoints, ubInterruptType)); DebugMsg (TOPIC_JA2INTERRUPT,DBG_LEVEL_3,String("ResolveInterruptsVs: Soldier ID = %d, APs = %d (interrupt type = %d)",pSoldier->ubID,pSoldier->bActionPoints, ubInterruptType));
UINT8 ubTeam; UINT8 ubTeam;
UINT16 ubOpp; SoldierID ubOpp;
UINT16 ubIntCnt; UINT16 ubIntCnt;
UINT16 ubIntList[MAXMERCS]; UINT16 ubIntList[MAXMERCS];
UINT8 ubIntDiff[MAXMERCS]; UINT8 ubIntDiff[MAXMERCS];
@@ -2404,9 +2402,9 @@ void ResolveInterruptsVs( SOLDIERTYPE * pSoldier, UINT8 ubInterruptType)
// WDS fix broken interrupts (I hope...) // WDS fix broken interrupts (I hope...)
if (/*gTacticalStatus.Team[ubTeam].bTeamActive &&*/ (gTacticalStatus.Team[ubTeam].bSide != pSoldier->bSide) && ubTeam != CIV_TEAM) if (/*gTacticalStatus.Team[ubTeam].bTeamActive &&*/ (gTacticalStatus.Team[ubTeam].bSide != pSoldier->bSide) && ubTeam != CIV_TEAM)
{ {
for ( ubOpp = gTacticalStatus.Team[ ubTeam ].bFirstID; ubOpp <= gTacticalStatus.Team[ ubTeam ].bLastID; ubOpp++) for ( ubOpp = gTacticalStatus.Team[ ubTeam ].bFirstID; ubOpp <= gTacticalStatus.Team[ ubTeam ].bLastID; ++ubOpp)
{ {
pOpponent = MercPtrs[ubOpp]; pOpponent = ubOpp;
AssertNotNIL(pOpponent); AssertNotNIL(pOpponent);
if ( pOpponent->bActive && pOpponent->bInSector && (pOpponent->stats.bLife >= OKLIFE) && (pOpponent->bBreath >= OKBREATH) && !(pOpponent->bCollapsed) ) if ( pOpponent->bActive && pOpponent->bInSector && (pOpponent->stats.bLife >= OKLIFE) && (pOpponent->bBreath >= OKBREATH) && !(pOpponent->bCollapsed) )
{ {
@@ -2519,17 +2517,16 @@ void ResolveInterruptsVs( SOLDIERTYPE * pSoldier, UINT8 ubInterruptType)
{ {
// if anyone on this team is under AI control, remove // if anyone on this team is under AI control, remove
// their AI control flag and put them on the queue instead of this guy // their AI control flag and put them on the queue instead of this guy
for ( ubLoop = gTacticalStatus.Team[ gTacticalStatus.ubCurrentTeam ].bFirstID; ubLoop <= gTacticalStatus.Team[ gTacticalStatus.ubCurrentTeam ].bLastID; ubLoop++ ) for ( SoldierID id = gTacticalStatus.Team[ gTacticalStatus.ubCurrentTeam ].bFirstID; id <= gTacticalStatus.Team[ gTacticalStatus.ubCurrentTeam ].bLastID; ++id)
{ {
if ( (MercPtrs[ ubLoop ]->flags.uiStatusFlags & SOLDIER_UNDERAICONTROL) ) if ( id->flags.uiStatusFlags & SOLDIER_UNDERAICONTROL)
{ {
// this guy lost control // this guy lost control
MercPtrs[ ubLoop ]->flags.uiStatusFlags &= (~SOLDIER_UNDERAICONTROL); id->flags.uiStatusFlags &= (~SOLDIER_UNDERAICONTROL);
AddToIntList( ubLoop, FALSE, TRUE); AddToIntList( id, FALSE, TRUE);
break; break;
} }
} }
} }
else else
{ {
+297 -287
View File
@@ -2209,9 +2209,10 @@ void GetKeyboardInput( UINT32 *puiNewEvent )
// sevenfm: unready weapon for all selected // sevenfm: unready weapon for all selected
if (!fFound) if (!fFound)
{ {
UINT16 cnt = gTacticalStatus.Team[gbPlayerNum].bFirstID; SoldierID cnt = gTacticalStatus.Team[gbPlayerNum].bFirstID;
for (SOLDIERTYPE *pSoldier = MercPtrs[cnt]; cnt <= gTacticalStatus.Team[gbPlayerNum].bLastID; cnt++, pSoldier++) for (; cnt <= gTacticalStatus.Team[gbPlayerNum].bLastID; ++cnt )
{ {
SOLDIERTYPE *pSoldier = cnt;
if (pSoldier->bActive && pSoldier->bInSector && pSoldier->flags.uiStatusFlags & SOLDIER_MULTI_SELECTED && WeaponReady(pSoldier)) if (pSoldier->bActive && pSoldier->bInSector && pSoldier->flags.uiStatusFlags & SOLDIER_MULTI_SELECTED && WeaponReady(pSoldier))
{ {
pSoldier->InternalSoldierReadyWeapon(pSoldier->ubDirection, TRUE, FALSE); pSoldier->InternalSoldierReadyWeapon(pSoldier->ubDirection, TRUE, FALSE);
@@ -4125,14 +4126,16 @@ void GetKeyboardInput( UINT32 *puiNewEvent )
// swap sungoggles and nightgoggles / put on gas masks // swap sungoggles and nightgoggles / put on gas masks
case 'N': case 'N':
SOLDIERTYPE *pTeamSoldier; {
UINT16 bLoop; SOLDIERTYPE *pTeamSoldier;
SoldierID id;
// emergency command: everybody in this sector puts on gasmasks // emergency command: everybody in this sector puts on gasmasks
if ( fAlt ) if ( fAlt )
{ {
for ( bLoop = gTacticalStatus.Team[gbPlayerNum].bFirstID, pTeamSoldier = MercPtrs[bLoop]; bLoop <= gTacticalStatus.Team[gbPlayerNum].bLastID; bLoop++, pTeamSoldier++ ) for ( id = gTacticalStatus.Team[gbPlayerNum].bFirstID; id <= gTacticalStatus.Team[gbPlayerNum].bLastID; ++id )
{ {
pTeamSoldier = id;
if ( !AM_A_ROBOT( pTeamSoldier ) && pTeamSoldier->stats.bLife >= OKLIFE && (pTeamSoldier->sSectorX == gWorldSectorX) && (pTeamSoldier->sSectorY == gWorldSectorY) && (pTeamSoldier->bSectorZ == gbWorldSectorZ) ) if ( !AM_A_ROBOT( pTeamSoldier ) && pTeamSoldier->stats.bLife >= OKLIFE && (pTeamSoldier->sSectorX == gWorldSectorX) && (pTeamSoldier->sSectorY == gWorldSectorY) && (pTeamSoldier->bSectorZ == gbWorldSectorZ) )
{ {
WearGasMaskIfAvailable( pTeamSoldier ); WearGasMaskIfAvailable( pTeamSoldier );
@@ -4149,37 +4152,39 @@ void GetKeyboardInput( UINT32 *puiNewEvent )
{ {
BOOLEAN fToNightVision; BOOLEAN fToNightVision;
for (bLoop=gTacticalStatus.Team[gbPlayerNum].bFirstID, pTeamSoldier=MercPtrs[bLoop]; bLoop <= gTacticalStatus.Team[gbPlayerNum].bLastID; bLoop++, pTeamSoldier++) for ( id = gTacticalStatus.Team[gbPlayerNum].bFirstID; id <= gTacticalStatus.Team[gbPlayerNum].bLastID; ++id )
{ {
if ( OK_CONTROLLABLE_MERC( pTeamSoldier ) && pTeamSoldier->bAssignment == CurrentSquad( ) && !AM_A_ROBOT( pTeamSoldier ) ) pTeamSoldier = id;
if ( OK_CONTROLLABLE_MERC( pTeamSoldier ) && pTeamSoldier->bAssignment == CurrentSquad() && !AM_A_ROBOT( pTeamSoldier ) )
{ {
if ( pTeamSoldier->inv[HEAD1POS].exists() || pTeamSoldier->inv[HEAD2POS].exists() ) if ( pTeamSoldier->inv[HEAD1POS].exists() || pTeamSoldier->inv[HEAD2POS].exists() )
{ {
fToNightVision = ( Item[pTeamSoldier->inv[HEAD1POS].usItem].brightlightvisionrangebonus > 0 || Item[pTeamSoldier->inv[HEAD2POS].usItem].brightlightvisionrangebonus > 0 ); fToNightVision = (Item[pTeamSoldier->inv[HEAD1POS].usItem].brightlightvisionrangebonus > 0 || Item[pTeamSoldier->inv[HEAD2POS].usItem].brightlightvisionrangebonus > 0);
break; break;
} }
if ( bLoop == gTacticalStatus.Team[gbPlayerNum].bLastID ) if ( id == gTacticalStatus.Team[gbPlayerNum].bLastID )
{ {
// Default to night or day based on game hour // Default to night or day based on game hour
fToNightVision = NightTime(); fToNightVision = NightTime();
} }
} }
} }
for (bLoop=gTacticalStatus.Team[gbPlayerNum].bFirstID, pTeamSoldier=MercPtrs[bLoop]; bLoop <= gTacticalStatus.Team[gbPlayerNum].bLastID; bLoop++, pTeamSoldier++) for ( id = gTacticalStatus.Team[gbPlayerNum].bFirstID; id <= gTacticalStatus.Team[gbPlayerNum].bLastID; ++id )
{ {
pTeamSoldier = id;
// HEADROCK HAM 3.5: When this INI setting is enabled, ALL mercs in the current sector will do a goggle swap. // HEADROCK HAM 3.5: When this INI setting is enabled, ALL mercs in the current sector will do a goggle swap.
if (gGameExternalOptions.fGoggleSwapAffectsAllMercsInSector) if ( gGameExternalOptions.fGoggleSwapAffectsAllMercsInSector )
{ {
if ( OK_CONTROLLABLE_MERC( pTeamSoldier ) && pTeamSoldier->sSectorX == gWorldSectorX && pTeamSoldier->sSectorY == gWorldSectorY && pTeamSoldier->bSectorZ == gbWorldSectorZ && !AM_A_ROBOT( pTeamSoldier ) ) if ( OK_CONTROLLABLE_MERC( pTeamSoldier ) && pTeamSoldier->sSectorX == gWorldSectorX && pTeamSoldier->sSectorY == gWorldSectorY && pTeamSoldier->bSectorZ == gbWorldSectorZ && !AM_A_ROBOT( pTeamSoldier ) )
{ {
SwapGogglesUniformly(pTeamSoldier, fToNightVision); SwapGogglesUniformly( pTeamSoldier, fToNightVision );
} }
} }
else else
{ {
if ( OK_CONTROLLABLE_MERC( pTeamSoldier ) && pTeamSoldier->bAssignment == CurrentSquad( ) && !AM_A_ROBOT( pTeamSoldier ) ) if ( OK_CONTROLLABLE_MERC( pTeamSoldier ) && pTeamSoldier->bAssignment == CurrentSquad() && !AM_A_ROBOT( pTeamSoldier ) )
{ {
SwapGogglesUniformly(pTeamSoldier, fToNightVision); SwapGogglesUniformly( pTeamSoldier, fToNightVision );
} }
} }
} }
@@ -4189,7 +4194,7 @@ void GetKeyboardInput( UINT32 *puiNewEvent )
HandleTBSwapGoogles(); HandleTBSwapGoogles();
} }
break; break;
}
case 'n': case 'n':
if ( !AreInMeanwhile() ) if ( !AreInMeanwhile() )
{ {
@@ -6271,7 +6276,6 @@ void HandleSelectMercSlot( UINT8 ubPanelSlot, INT8 bCode )
void TestMeanWhile( INT32 iID ) void TestMeanWhile( INT32 iID )
{ {
MEANWHILE_DEFINITION MeanwhileDef; MEANWHILE_DEFINITION MeanwhileDef;
INT32 cnt;
SOLDIERTYPE *pSoldier; SOLDIERTYPE *pSoldier;
MeanwhileDef.sSectorX = gModSettings.ubMeanwhilePalaceSectorX; //3 MeanwhileDef.sSectorX = gModSettings.ubMeanwhilePalaceSectorX; //3
@@ -6288,10 +6292,11 @@ void TestMeanWhile( INT32 iID )
// Loop through our mercs and set gridnos once some found..... // Loop through our mercs and set gridnos once some found.....
// look for all mercs on the same team, // look for all mercs on the same team,
cnt = gTacticalStatus.Team[ gbPlayerNum ].bFirstID; SoldierID cnt = gTacticalStatus.Team[ gbPlayerNum ].bFirstID;
for ( pSoldier = MercPtrs[ cnt ]; cnt <= gTacticalStatus.Team[ gbPlayerNum ].bLastID; cnt++,pSoldier++) for ( ; cnt <= gTacticalStatus.Team[ gbPlayerNum ].bLastID; ++cnt )
{ {
pSoldier = cnt;
// Are we a POW in this sector? // Are we a POW in this sector?
if ( pSoldier->bActive && pSoldier->bInSector ) if ( pSoldier->bActive && pSoldier->bInSector )
{ {
@@ -6363,16 +6368,16 @@ void HandleStanceChangeFromUIKeys( UINT8 ubAnimHeight )
{ {
// If we have multiple guys selected, make all change stance! // If we have multiple guys selected, make all change stance!
SOLDIERTYPE * pSoldier; SOLDIERTYPE * pSoldier;
INT32 cnt;
if ( gTacticalStatus.fAtLeastOneGuyOnMultiSelect && !( gTacticalStatus.uiFlags & INCOMBAT ) ) if ( gTacticalStatus.fAtLeastOneGuyOnMultiSelect && !( gTacticalStatus.uiFlags & INCOMBAT ) )
{ {
// OK, loop through all guys who are 'multi-selected' and // OK, loop through all guys who are 'multi-selected' and
// check if our currently selected guy is amoung the // check if our currently selected guy is amoung the
// lucky few.. if not, change to a guy who is... // lucky few.. if not, change to a guy who is...
cnt = gTacticalStatus.Team[ gbPlayerNum ].bFirstID; SoldierID cnt = gTacticalStatus.Team[ gbPlayerNum ].bFirstID;
for ( pSoldier = MercPtrs[ cnt ]; cnt <= gTacticalStatus.Team[ gbPlayerNum ].bLastID; cnt++, pSoldier++ ) for ( ; cnt <= gTacticalStatus.Team[ gbPlayerNum ].bLastID; ++cnt )
{ {
pSoldier = cnt;
if ( pSoldier->bActive && pSoldier->bInSector ) if ( pSoldier->bActive && pSoldier->bInSector )
{ {
if ( pSoldier->flags.uiStatusFlags & SOLDIER_MULTI_SELECTED ) if ( pSoldier->flags.uiStatusFlags & SOLDIER_MULTI_SELECTED )
@@ -6485,16 +6490,16 @@ void HandleStealthChangeFromUIKeys( )
{ {
// If we have multiple guys selected, make all change stance! // If we have multiple guys selected, make all change stance!
SOLDIERTYPE * pSoldier; SOLDIERTYPE * pSoldier;
INT32 cnt;
if ( gTacticalStatus.fAtLeastOneGuyOnMultiSelect && !( gTacticalStatus.uiFlags & INCOMBAT ) ) if ( gTacticalStatus.fAtLeastOneGuyOnMultiSelect && !( gTacticalStatus.uiFlags & INCOMBAT ) )
{ {
// OK, loop through all guys who are 'multi-selected' and // OK, loop through all guys who are 'multi-selected' and
// check if our currently selected guy is amoung the // check if our currently selected guy is amoung the
// lucky few.. if not, change to a guy who is... // lucky few.. if not, change to a guy who is...
cnt = gTacticalStatus.Team[ gbPlayerNum ].bFirstID; SoldierID cnt = gTacticalStatus.Team[ gbPlayerNum ].bFirstID;
for ( pSoldier = MercPtrs[ cnt ]; cnt <= gTacticalStatus.Team[ gbPlayerNum ].bLastID; cnt++, pSoldier++ ) for ( ; cnt <= gTacticalStatus.Team[ gbPlayerNum ].bLastID; ++cnt )
{ {
pSoldier = cnt;
if ( pSoldier->bActive && !AM_A_ROBOT( pSoldier ) && pSoldier->bInSector ) if ( pSoldier->bActive && !AM_A_ROBOT( pSoldier ) && pSoldier->bInSector )
{ {
if ( pSoldier->flags.uiStatusFlags & SOLDIER_MULTI_SELECTED ) if ( pSoldier->flags.uiStatusFlags & SOLDIER_MULTI_SELECTED )
@@ -7682,12 +7687,13 @@ void HandleTBToggleStealthAll( void )
// Toggle squad's stealth mode..... // Toggle squad's stealth mode.....
// For each guy on squad... // For each guy on squad...
SOLDIERTYPE *pTeamSoldier; SOLDIERTYPE *pTeamSoldier;
UINT16 bLoop; SoldierID bLoop;
BOOLEAN fStealthOn = FALSE; BOOLEAN fStealthOn = FALSE;
// Check if at least one guy is on stealth.... // Check if at least one guy is on stealth....
for (bLoop=gTacticalStatus.Team[gbPlayerNum].bFirstID, pTeamSoldier=MercPtrs[bLoop]; bLoop <= gTacticalStatus.Team[gbPlayerNum].bLastID; bLoop++, pTeamSoldier++) for (bLoop=gTacticalStatus.Team[gbPlayerNum].bFirstID; bLoop <= gTacticalStatus.Team[gbPlayerNum].bLastID; ++bLoop )
{ {
pTeamSoldier = bLoop;
if ( OK_CONTROLLABLE_MERC( pTeamSoldier ) && pTeamSoldier->bAssignment == CurrentSquad( ) ) if ( OK_CONTROLLABLE_MERC( pTeamSoldier ) && pTeamSoldier->bAssignment == CurrentSquad( ) )
{ {
if ( pTeamSoldier->bStealthMode ) if ( pTeamSoldier->bStealthMode )
@@ -7697,8 +7703,9 @@ void HandleTBToggleStealthAll( void )
fStealthOn = !fStealthOn; fStealthOn = !fStealthOn;
for (bLoop=gTacticalStatus.Team[gbPlayerNum].bFirstID, pTeamSoldier=MercPtrs[bLoop]; bLoop <= gTacticalStatus.Team[gbPlayerNum].bLastID; bLoop++, pTeamSoldier++) for (bLoop=gTacticalStatus.Team[gbPlayerNum].bFirstID; bLoop <= gTacticalStatus.Team[gbPlayerNum].bLastID; ++bLoop )
{ {
pTeamSoldier = bLoop;
if ( OK_CONTROLLABLE_MERC( pTeamSoldier ) && pTeamSoldier->bAssignment == CurrentSquad( ) && !AM_A_ROBOT( pTeamSoldier ) ) if ( OK_CONTROLLABLE_MERC( pTeamSoldier ) && pTeamSoldier->bAssignment == CurrentSquad( ) && !AM_A_ROBOT( pTeamSoldier ) )
{ {
if ( gpSMCurrentMerc != NULL && bLoop == gpSMCurrentMerc->ubID ) if ( gpSMCurrentMerc != NULL && bLoop == gpSMCurrentMerc->ubID )
@@ -7715,6 +7722,7 @@ void HandleTBToggleStealthAll( void )
else else
ScreenMsg( FONT_MCOLOR_LTYELLOW, MSG_INTERFACE, pMessageStrings[ MSG_SQUAD_OFF_STEALTHMODE ] ); ScreenMsg( FONT_MCOLOR_LTYELLOW, MSG_INTERFACE, pMessageStrings[ MSG_SQUAD_OFF_STEALTHMODE ] );
} }
void HandleTBToggleFireMode( void ) void HandleTBToggleFireMode( void )
{ {
// toggle fire mode // toggle fire mode
@@ -7722,23 +7730,23 @@ void HandleTBToggleFireMode( void )
( ( gsCurInterfacePanel != SM_PANEL ) || ( ButtonList[ iSMPanelButtons[ BURSTMODE_BUTTON ] ]->uiFlags & BUTTON_ENABLED ) ) ) ( ( gsCurInterfacePanel != SM_PANEL ) || ( ButtonList[ iSMPanelButtons[ BURSTMODE_BUTTON ] ]->uiFlags & BUTTON_ENABLED ) ) )
SetBurstMode(); SetBurstMode();
} }
void HandleTBSelectAllMercs( void ) void HandleTBSelectAllMercs( void )
{ {
SOLDIERTYPE * pSoldier; SOLDIERTYPE *pSoldier;
INT32 cnt; SoldierID cnt = gTacticalStatus.Team[gbPlayerNum].bFirstID;
for ( ; cnt <= gTacticalStatus.Team[gbPlayerNum].bLastID; ++cnt )
cnt = gTacticalStatus.Team[ gbPlayerNum ].bFirstID; {
for ( pSoldier = MercPtrs[ cnt ]; cnt <= gTacticalStatus.Team[ gbPlayerNum ].bLastID; cnt++, pSoldier++ ) pSoldier = cnt;
{
// Check if this guy is OK to control.... // Check if this guy is OK to control....
if ( OK_CONTROLLABLE_MERC( pSoldier ) && !( pSoldier->flags.uiStatusFlags & ( SOLDIER_VEHICLE | SOLDIER_PASSENGER | SOLDIER_DRIVER ) ) ) if ( OK_CONTROLLABLE_MERC( pSoldier ) && !(pSoldier->flags.uiStatusFlags & (SOLDIER_VEHICLE | SOLDIER_PASSENGER | SOLDIER_DRIVER)) )
{ {
pSoldier->flags.uiStatusFlags |= SOLDIER_MULTI_SELECTED; pSoldier->flags.uiStatusFlags |= SOLDIER_MULTI_SELECTED;
} }
} }
EndMultiSoldierSelection( TRUE ); EndMultiSoldierSelection( TRUE );
} }
void HandleTBCycleThroughKnownEnemies( void ) void HandleTBCycleThroughKnownEnemies( void )
{ {
if ( gTacticalStatus.uiFlags & TURNBASED && (gTacticalStatus.uiFlags & INCOMBAT) ) if ( gTacticalStatus.uiFlags & TURNBASED && (gTacticalStatus.uiFlags & INCOMBAT) )
@@ -7747,6 +7755,7 @@ void HandleTBCycleThroughKnownEnemies( void )
CycleThroughKnownEnemies( ); CycleThroughKnownEnemies( );
} }
} }
void HandleTBCycleThroughKnownEnemiesBackward( void ) void HandleTBCycleThroughKnownEnemiesBackward( void )
{ {
if ( gTacticalStatus.uiFlags & TURNBASED && (gTacticalStatus.uiFlags & INCOMBAT) ) if ( gTacticalStatus.uiFlags & TURNBASED && (gTacticalStatus.uiFlags & INCOMBAT) )
@@ -7755,6 +7764,7 @@ void HandleTBCycleThroughKnownEnemiesBackward( void )
CycleThroughKnownEnemies( TRUE ); CycleThroughKnownEnemies( TRUE );
} }
} }
void HandleTBCycleThroughVisibleEnemies( void ) void HandleTBCycleThroughVisibleEnemies( void )
{ {
SOLDIERTYPE *pSoldier; SOLDIERTYPE *pSoldier;
@@ -7848,10 +7858,10 @@ void HandleTBSwapSidearm( void )
void HandleTBSwapGoogles( void ) void HandleTBSwapGoogles( void )
{ {
SOLDIERTYPE *pTeamSoldier; SOLDIERTYPE *pTeamSoldier;
UINT16 bLoop;
for (bLoop=gTacticalStatus.Team[gbPlayerNum].bFirstID, pTeamSoldier=MercPtrs[bLoop]; bLoop <= gTacticalStatus.Team[gbPlayerNum].bLastID; bLoop++, pTeamSoldier++) for ( SoldierID bLoop=gTacticalStatus.Team[gbPlayerNum].bFirstID; bLoop <= gTacticalStatus.Team[gbPlayerNum].bLastID; ++bLoop )
{ {
pTeamSoldier = bLoop;
// HEADROCK HAM 3.5: When this INI setting is enabled, ALL mercs in the current sector will do a goggle swap. // HEADROCK HAM 3.5: When this INI setting is enabled, ALL mercs in the current sector will do a goggle swap.
if (gGameExternalOptions.fGoggleSwapAffectsAllMercsInSector) if (gGameExternalOptions.fGoggleSwapAffectsAllMercsInSector)
{ {
@@ -7945,270 +7955,270 @@ void HandleTBReload( void )
} }
void HandleTBReloadAll( void ) void HandleTBReloadAll( void )
{ {
if (! ( gTacticalStatus.fEnemyInSector ) ) if ( !(gTacticalStatus.fEnemyInSector) )
{
SOLDIERTYPE *pTeamSoldier;
SoldierID bLoop;
UINT16 bullets;
OBJECTTYPE *pGun, *pAmmo, *pAmmoMags;
// Search for soldier
for ( bLoop = gTacticalStatus.Team[gbPlayerNum].bFirstID; bLoop <= gTacticalStatus.Team[gbPlayerNum].bLastID; ++bLoop )
{
pTeamSoldier = bLoop;
if ( OK_CONTROLLABLE_MERC( pTeamSoldier ) && pTeamSoldier->bAssignment == CurrentSquad() && !AM_A_ROBOT( pTeamSoldier ) )
{
// Search for gun in soldier inventory
UINT32 invsize = pTeamSoldier->inv.size();
for ( UINT32 bLoop2 = 0; bLoop2 < invsize; ++bLoop2 )
{ {
SOLDIERTYPE *pTeamSoldier; if ( (Item[pTeamSoldier->inv[bLoop2].usItem].usItemClass & (IC_GUN | IC_LAUNCHER)) )
UINT16 bLoop;
UINT16 bullets;
OBJECTTYPE *pGun, *pAmmo, *pAmmoMags;
// Search for soldier
for (bLoop=gTacticalStatus.Team[gbPlayerNum].bFirstID, pTeamSoldier=MercPtrs[bLoop]; bLoop <= gTacticalStatus.Team[gbPlayerNum].bLastID; bLoop++, pTeamSoldier++)
{ {
if ( OK_CONTROLLABLE_MERC( pTeamSoldier ) && pTeamSoldier->bAssignment == CurrentSquad( ) && !AM_A_ROBOT( pTeamSoldier ) ) pGun = &(pTeamSoldier->inv[bLoop2]);
UINT16 gunmagsize = GetMagSize( pGun );
//if magazine is not full
if ( (*pGun)[0]->data.gun.ubGunShotsLeft < gunmagsize )
{ {
// Search for gun in soldier inventory // Search for ammo in sector
UINT32 invsize = pTeamSoldier->inv.size(); for ( UINT32 uiLoop = 0; uiLoop < guiNumWorldItems; ++uiLoop )
for (UINT32 bLoop2 = 0; bLoop2 < invsize; ++bLoop2)
{ {
if ( (Item[pTeamSoldier->inv[bLoop2].usItem].usItemClass & (IC_GUN | IC_LAUNCHER)) ) if ( (gWorldItems[uiLoop].bVisible == TRUE) && (gWorldItems[uiLoop].fExists) && (gWorldItems[uiLoop].usFlags & WORLD_ITEM_REACHABLE) && !(gWorldItems[uiLoop].usFlags & WORLD_ITEM_ARMED_BOMB) )//item exists, is reachable, is visible and is not trapped
{ {
pGun = &(pTeamSoldier->inv[bLoop2]); if ( (Item[gWorldItems[uiLoop].object.usItem].usItemClass & IC_AMMO) ) // the item is ammo
UINT16 gunmagsize = GetMagSize( pGun );
//if magazine is not full
if ( (*pGun)[0]->data.gun.ubGunShotsLeft < gunmagsize )
{ {
// Search for ammo in sector pAmmo = &(gWorldItems[uiLoop].object);
for ( UINT32 uiLoop = 0; uiLoop < guiNumWorldItems; ++uiLoop )
if ( CompatibleAmmoForGun( pAmmo, pGun ) ) // can use the ammo with this gun
{ {
if ( (gWorldItems[ uiLoop ].bVisible == TRUE) && (gWorldItems[ uiLoop ].fExists) && (gWorldItems[ uiLoop ].usFlags & WORLD_ITEM_REACHABLE) && !(gWorldItems[ uiLoop ].usFlags & WORLD_ITEM_ARMED_BOMB) )//item exists, is reachable, is visible and is not trapped // same ammo type in gun and magazine
if ( Magazine[Item[(*pGun)[0]->data.gun.usGunAmmoItem].ubClassIndex].ubAmmoType == Magazine[Item[pAmmo->usItem].ubClassIndex].ubAmmoType )
{ {
if ( ( Item[ gWorldItems[ uiLoop ].object.usItem ].usItemClass & IC_AMMO ) ) // the item is ammo ReloadGun( pTeamSoldier, pGun, pAmmo );
{
pAmmo = &( gWorldItems[ uiLoop ].object );
if ( CompatibleAmmoForGun( pAmmo, pGun ) ) // can use the ammo with this gun
{
// same ammo type in gun and magazine
if ( Magazine[Item[(*pGun)[0]->data.gun.usGunAmmoItem].ubClassIndex].ubAmmoType == Magazine[Item[pAmmo->usItem].ubClassIndex].ubAmmoType )
{
ReloadGun( pTeamSoldier, pGun, pAmmo );
}
if ((*pAmmo)[0]->data.ubShotsLeft == 0)
{
RemoveItemFromPool( gWorldItems[ uiLoop ].sGridNo, uiLoop, gWorldItems[ uiLoop ].ubLevel );
}
// if gun is full, we can stop this
if ( (*pGun)[0]->data.gun.ubGunShotsLeft >= gunmagsize )
break;
}
}
} }
if ( (*pAmmo)[0]->data.ubShotsLeft == 0 )
{
RemoveItemFromPool( gWorldItems[uiLoop].sGridNo, uiLoop, gWorldItems[uiLoop].ubLevel );
}
// if gun is full, we can stop this
if ( (*pGun)[0]->data.gun.ubGunShotsLeft >= gunmagsize )
break;
} }
} }
//CHRISL: if not enough ammo in sector, reload using ammo carried in inventory
if ( (*pGun)[0]->data.gun.ubGunShotsLeft < gunmagsize )
{
AutoReload( pTeamSoldier );
}
} }
} }
} }
} //CHRISL: if not enough ammo in sector, reload using ammo carried in inventory
if ( (*pGun)[0]->data.gun.ubGunShotsLeft < gunmagsize )
//MM: loop thru the soldiers again (lazy copy/paste :p). could do it all at once, but then there may not be enough ammo from the world items to fill everyone's guns first
for (bLoop=gTacticalStatus.Team[gbPlayerNum].bFirstID, pTeamSoldier=MercPtrs[bLoop]; bLoop <= gTacticalStatus.Team[gbPlayerNum].bLastID; bLoop++, pTeamSoldier++)
{
if ( OK_CONTROLLABLE_MERC( pTeamSoldier ) && pTeamSoldier->bAssignment == CurrentSquad( ) && !AM_A_ROBOT( pTeamSoldier ) )
{ {
// Search for ammo in soldier inventory AutoReload( pTeamSoldier );
UINT32 invsize = pTeamSoldier->inv.size();
for (UINT32 bLoop2 = 0; bLoop2 < invsize; ++bLoop2)
{
if ( Item[pTeamSoldier->inv[bLoop2].usItem].usItemClass & IC_AMMO )
{
pAmmoMags = &(pTeamSoldier->inv[bLoop2]);
for ( UINT16 stackMag = 0; stackMag < (*pAmmoMags).ubNumberOfObjects; stackMag++ )
{
if ( (*pAmmoMags)[stackMag]->data.ubShotsLeft < Magazine[Item[pAmmoMags->usItem].ubClassIndex].ubMagSize )
{
// Search for ammo in sector
for ( UINT32 uiLoop = 0; uiLoop < guiNumWorldItems; ++uiLoop )
{
if ( (gWorldItems[ uiLoop ].bVisible == TRUE) && (gWorldItems[ uiLoop ].fExists) && (gWorldItems[ uiLoop ].usFlags & WORLD_ITEM_REACHABLE) && !(gWorldItems[ uiLoop ].usFlags & WORLD_ITEM_ARMED_BOMB) )//item exists, is reachable, is visible and is not trapped
{
if ( ( Item[ gWorldItems[ uiLoop ].object.usItem ].usItemClass & IC_AMMO ) ) // the item is ammo
{
pAmmo = &( gWorldItems[ uiLoop ].object );
if ( Magazine[Item[pAmmoMags->usItem].ubClassIndex].ubCalibre == Magazine[Item[pAmmo->usItem].ubClassIndex].ubCalibre ) // same calibre
{
// same ammo type
if ( Magazine[Item[pAmmoMags->usItem].ubClassIndex].ubAmmoType == Magazine[Item[pAmmo->usItem].ubClassIndex].ubAmmoType )
{
bullets = Magazine[Item[pAmmoMags->usItem].ubClassIndex].ubMagSize - (*pAmmoMags)[stackMag]->data.ubShotsLeft;
if ((*pAmmo)[0]->data.ubShotsLeft < bullets)
bullets = (*pAmmo)[0]->data.ubShotsLeft;
(*pAmmoMags)[stackMag]->data.ubShotsLeft += bullets;
(*pAmmo)[0]->data.ubShotsLeft -= bullets;
fCharacterInfoPanelDirty = TRUE;
fInterfacePanelDirty = DIRTYLEVEL2;
}
if ((*pAmmo)[0]->data.ubShotsLeft == 0)
{
RemoveItemFromPool( gWorldItems[ uiLoop ].sGridNo, uiLoop, gWorldItems[ uiLoop ].ubLevel );
}
}
}
}
}
//MM: if magazines still are partly empty, look through inventory for boxes and crates
if ( (*pAmmoMags)[stackMag]->data.ubShotsLeft < Magazine[Item[pAmmoMags->usItem].ubClassIndex].ubMagSize )
{
UINT32 invsize = pTeamSoldier->inv.size();
for (UINT32 uiLoop = 0; uiLoop < invsize; ++uiLoop)
{
if ( (Item[pTeamSoldier->inv[uiLoop].usItem].usItemClass & IC_AMMO) && Magazine[Item[pTeamSoldier->inv[uiLoop].usItem].ubClassIndex].ubMagType >= AMMO_BOX )
{
pAmmo = &(pTeamSoldier->inv[uiLoop]);
if ( Magazine[Item[pAmmoMags->usItem].ubClassIndex].ubCalibre == Magazine[Item[pAmmo->usItem].ubClassIndex].ubCalibre ) // same calibre
{
// same ammo type
if ( Magazine[Item[pAmmoMags->usItem].ubClassIndex].ubAmmoType == Magazine[Item[pAmmo->usItem].ubClassIndex].ubAmmoType )
{
bullets = Magazine[Item[pAmmoMags->usItem].ubClassIndex].ubMagSize - (*pAmmoMags)[stackMag]->data.ubShotsLeft;
if ((*pAmmo)[0]->data.ubShotsLeft < bullets)
bullets = (*pAmmo)[0]->data.ubShotsLeft;
(*pAmmoMags)[stackMag]->data.ubShotsLeft += bullets;
(*pAmmo)[0]->data.ubShotsLeft -= bullets;
fCharacterInfoPanelDirty = TRUE;
fInterfacePanelDirty = DIRTYLEVEL2;
}
if ((*pAmmo)[0]->data.ubShotsLeft == 0)
DeleteObj(pAmmo);
}
}
}
}
}
}
if (IsWeaponAttached(pGun, IC_GUN))
{
OBJECTTYPE *pGun2 = FindAttachedWeapon(pGun, IC_GUN);
UINT16 gunmagsize2 = GetMagSize( pGun2 );
if ( (*pGun2)[0]->data.gun.ubGunShotsLeft < gunmagsize2 )
{
// Search for ammo in sector
for ( UINT32 uiLoop = 0; uiLoop < guiNumWorldItems; ++uiLoop )
{
if ( (gWorldItems[ uiLoop ].bVisible == TRUE) && (gWorldItems[ uiLoop ].fExists) && (gWorldItems[ uiLoop ].usFlags & WORLD_ITEM_REACHABLE) && !(gWorldItems[ uiLoop ].usFlags & WORLD_ITEM_ARMED_BOMB) )//item exists, is reachable, is visible and is not trapped
{
if ( ( Item[ gWorldItems[ uiLoop ].object.usItem ].usItemClass & IC_AMMO ) ) // the item is ammo
{
pAmmo = &( gWorldItems[ uiLoop ].object );
if ( CompatibleAmmoForGun( pAmmo, pGun2 ) ) // can use the ammo with this gun
{
// same ammo type in gun and magazine
if ( Magazine[Item[(*pGun2)[0]->data.gun.usGunAmmoItem].ubClassIndex].ubAmmoType == Magazine[Item[pAmmo->usItem].ubClassIndex].ubAmmoType )
{
ReloadGun( pTeamSoldier, pGun2, pAmmo );
}
if ((*pAmmo)[0]->data.ubShotsLeft == 0)
{
RemoveItemFromPool( gWorldItems[ uiLoop ].sGridNo, uiLoop, gWorldItems[ uiLoop ].ubLevel );
}
// if gun is full, we can stop this
if ( (*pGun2)[0]->data.gun.ubGunShotsLeft >= gunmagsize2 )
break;
}
}
}
}
}
//CHRISL: if not enough ammo in sector, reload using ammo carried in inventory
if ( (*pGun2)[0]->data.gun.ubGunShotsLeft < gunmagsize2 )
{
AutoReload( pTeamSoldier );
}
}
}
}
} }
} }
} }
else }
}
//MM: loop thru the soldiers again (lazy copy/paste :p). could do it all at once, but then there may not be enough ammo from the world items to fill everyone's guns first
for ( bLoop = gTacticalStatus.Team[gbPlayerNum].bFirstID; bLoop <= gTacticalStatus.Team[gbPlayerNum].bLastID; ++bLoop )
{
pTeamSoldier = bLoop;
if ( OK_CONTROLLABLE_MERC( pTeamSoldier ) && pTeamSoldier->bAssignment == CurrentSquad() && !AM_A_ROBOT( pTeamSoldier ) )
{
// Search for ammo in soldier inventory
UINT32 invsize = pTeamSoldier->inv.size();
for ( UINT32 bLoop2 = 0; bLoop2 < invsize; ++bLoop2 )
{ {
SOLDIERTYPE *pTeamSoldier; if ( Item[pTeamSoldier->inv[bLoop2].usItem].usItemClass & IC_AMMO )
UINT16 bLoop;
OBJECTTYPE *pGun, *pAmmo;
for (bLoop=gTacticalStatus.Team[gbPlayerNum].bFirstID, pTeamSoldier=MercPtrs[bLoop]; bLoop <= gTacticalStatus.Team[gbPlayerNum].bLastID; ++bLoop, pTeamSoldier++)
{ {
if ( OK_CONTROLLABLE_MERC( pTeamSoldier ) && pTeamSoldier->bAssignment == CurrentSquad( ) && !AM_A_ROBOT( pTeamSoldier ) ) pAmmoMags = &(pTeamSoldier->inv[bLoop2]);
{
if ( (Item[pTeamSoldier->inv[HANDPOS].usItem].usItemClass & (IC_GUN | IC_LAUNCHER) ) )
{
if ( ( gTacticalStatus.uiFlags & INCOMBAT ) )
{
// Flugente: check for underbarrel weapons and use that object if necessary
pGun = pTeamSoldier->GetUsedWeapon( &(pTeamSoldier->inv[HANDPOS]) );
//magazine is not full for ( UINT16 stackMag = 0; stackMag < (*pAmmoMags).ubNumberOfObjects; stackMag++ )
if ( (*pGun)[0]->data.gun.ubGunShotsLeft < GetMagSize( pGun ) ) {
if ( (*pAmmoMags)[stackMag]->data.ubShotsLeft < Magazine[Item[pAmmoMags->usItem].ubClassIndex].ubMagSize )
{
// Search for ammo in sector
for ( UINT32 uiLoop = 0; uiLoop < guiNumWorldItems; ++uiLoop )
{
if ( (gWorldItems[uiLoop].bVisible == TRUE) && (gWorldItems[uiLoop].fExists) && (gWorldItems[uiLoop].usFlags & WORLD_ITEM_REACHABLE) && !(gWorldItems[uiLoop].usFlags & WORLD_ITEM_ARMED_BOMB) )//item exists, is reachable, is visible and is not trapped
{ {
AutoReload( pTeamSoldier ); if ( (Item[gWorldItems[uiLoop].object.usItem].usItemClass & IC_AMMO) ) // the item is ammo
{
pAmmo = &(gWorldItems[uiLoop].object);
if ( Magazine[Item[pAmmoMags->usItem].ubClassIndex].ubCalibre == Magazine[Item[pAmmo->usItem].ubClassIndex].ubCalibre ) // same calibre
{
// same ammo type
if ( Magazine[Item[pAmmoMags->usItem].ubClassIndex].ubAmmoType == Magazine[Item[pAmmo->usItem].ubClassIndex].ubAmmoType )
{
bullets = Magazine[Item[pAmmoMags->usItem].ubClassIndex].ubMagSize - (*pAmmoMags)[stackMag]->data.ubShotsLeft;
if ( (*pAmmo)[0]->data.ubShotsLeft < bullets )
bullets = (*pAmmo)[0]->data.ubShotsLeft;
(*pAmmoMags)[stackMag]->data.ubShotsLeft += bullets;
(*pAmmo)[0]->data.ubShotsLeft -= bullets;
fCharacterInfoPanelDirty = TRUE;
fInterfacePanelDirty = DIRTYLEVEL2;
}
if ( (*pAmmo)[0]->data.ubShotsLeft == 0 )
{
RemoveItemFromPool( gWorldItems[uiLoop].sGridNo, uiLoop, gWorldItems[uiLoop].ubLevel );
}
}
}
} }
} }
else
//MM: if magazines still are partly empty, look through inventory for boxes and crates
if ( (*pAmmoMags)[stackMag]->data.ubShotsLeft < Magazine[Item[pAmmoMags->usItem].ubClassIndex].ubMagSize )
{ {
// Search for gun in soldier inventory
UINT32 invsize = pTeamSoldier->inv.size(); UINT32 invsize = pTeamSoldier->inv.size();
for (UINT32 bLoop2 = 0; bLoop2 < invsize; ++bLoop2) for ( UINT32 uiLoop = 0; uiLoop < invsize; ++uiLoop )
{ {
if ( (Item[pTeamSoldier->inv[bLoop2].usItem].usItemClass & (IC_GUN | IC_LAUNCHER)) ) if ( (Item[pTeamSoldier->inv[uiLoop].usItem].usItemClass & IC_AMMO) && Magazine[Item[pTeamSoldier->inv[uiLoop].usItem].ubClassIndex].ubMagType >= AMMO_BOX )
{ {
pGun = &(pTeamSoldier->inv[bLoop2]); pAmmo = &(pTeamSoldier->inv[uiLoop]);
UINT16 gunmagsize = GetMagSize( pGun ); if ( Magazine[Item[pAmmoMags->usItem].ubClassIndex].ubCalibre == Magazine[Item[pAmmo->usItem].ubClassIndex].ubCalibre ) // same calibre
//if magazine is not full
if ( (*pGun)[0]->data.gun.ubGunShotsLeft < gunmagsize )
{ {
// Search for ammo in soldier inventory // same ammo type
for ( UINT32 uiLoop = 0; uiLoop < invsize; ++uiLoop ) if ( Magazine[Item[pAmmoMags->usItem].ubClassIndex].ubAmmoType == Magazine[Item[pAmmo->usItem].ubClassIndex].ubAmmoType )
{ {
if ( (Item[pTeamSoldier->inv[uiLoop].usItem].usItemClass & IC_AMMO ) ) // the item is ammo bullets = Magazine[Item[pAmmoMags->usItem].ubClassIndex].ubMagSize - (*pAmmoMags)[stackMag]->data.ubShotsLeft;
{
pAmmo = &(pTeamSoldier->inv[uiLoop]);
if ( CompatibleAmmoForGun( pAmmo, pGun ) ) // can use the ammo with this gun if ( (*pAmmo)[0]->data.ubShotsLeft < bullets )
{ bullets = (*pAmmo)[0]->data.ubShotsLeft;
// same ammo type in gun and magazine
if ( Magazine[Item[(*pGun)[0]->data.gun.usGunAmmoItem].ubClassIndex].ubAmmoType == Magazine[Item[pAmmo->usItem].ubClassIndex].ubAmmoType )
{
ReloadGun( pTeamSoldier, pGun, pAmmo );
fCharacterInfoPanelDirty = TRUE; (*pAmmoMags)[stackMag]->data.ubShotsLeft += bullets;
fInterfacePanelDirty = DIRTYLEVEL2; (*pAmmo)[0]->data.ubShotsLeft -= bullets;
// if gun is full, we can stop this fCharacterInfoPanelDirty = TRUE;
if ( (*pGun)[0]->data.gun.ubGunShotsLeft >= gunmagsize ) fInterfacePanelDirty = DIRTYLEVEL2;
break; }
}
} if ( (*pAmmo)[0]->data.ubShotsLeft == 0 )
} DeleteObj( pAmmo );
}
}
}
}
}
}
if ( IsWeaponAttached( pGun, IC_GUN ) )
{
OBJECTTYPE *pGun2 = FindAttachedWeapon( pGun, IC_GUN );
UINT16 gunmagsize2 = GetMagSize( pGun2 );
if ( (*pGun2)[0]->data.gun.ubGunShotsLeft < gunmagsize2 )
{
// Search for ammo in sector
for ( UINT32 uiLoop = 0; uiLoop < guiNumWorldItems; ++uiLoop )
{
if ( (gWorldItems[uiLoop].bVisible == TRUE) && (gWorldItems[uiLoop].fExists) && (gWorldItems[uiLoop].usFlags & WORLD_ITEM_REACHABLE) && !(gWorldItems[uiLoop].usFlags & WORLD_ITEM_ARMED_BOMB) )//item exists, is reachable, is visible and is not trapped
{
if ( (Item[gWorldItems[uiLoop].object.usItem].usItemClass & IC_AMMO) ) // the item is ammo
{
pAmmo = &(gWorldItems[uiLoop].object);
if ( CompatibleAmmoForGun( pAmmo, pGun2 ) ) // can use the ammo with this gun
{
// same ammo type in gun and magazine
if ( Magazine[Item[(*pGun2)[0]->data.gun.usGunAmmoItem].ubClassIndex].ubAmmoType == Magazine[Item[pAmmo->usItem].ubClassIndex].ubAmmoType )
{
ReloadGun( pTeamSoldier, pGun2, pAmmo );
}
if ( (*pAmmo)[0]->data.ubShotsLeft == 0 )
{
RemoveItemFromPool( gWorldItems[uiLoop].sGridNo, uiLoop, gWorldItems[uiLoop].ubLevel );
}
// if gun is full, we can stop this
if ( (*pGun2)[0]->data.gun.ubGunShotsLeft >= gunmagsize2 )
break;
}
}
}
}
}
//CHRISL: if not enough ammo in sector, reload using ammo carried in inventory
if ( (*pGun2)[0]->data.gun.ubGunShotsLeft < gunmagsize2 )
{
AutoReload( pTeamSoldier );
}
}
}
}
}
}
}
else
{
SOLDIERTYPE *pTeamSoldier;
SoldierID bLoop;
OBJECTTYPE *pGun, *pAmmo;
for ( bLoop = gTacticalStatus.Team[gbPlayerNum].bFirstID; bLoop <= gTacticalStatus.Team[gbPlayerNum].bLastID; ++bLoop )
{
pTeamSoldier = bLoop;
if ( OK_CONTROLLABLE_MERC( pTeamSoldier ) && pTeamSoldier->bAssignment == CurrentSquad() && !AM_A_ROBOT( pTeamSoldier ) )
{
if ( (Item[pTeamSoldier->inv[HANDPOS].usItem].usItemClass & (IC_GUN | IC_LAUNCHER)) )
{
if ( (gTacticalStatus.uiFlags & INCOMBAT) )
{
// Flugente: check for underbarrel weapons and use that object if necessary
pGun = pTeamSoldier->GetUsedWeapon( &(pTeamSoldier->inv[HANDPOS]) );
//magazine is not full
if ( (*pGun)[0]->data.gun.ubGunShotsLeft < GetMagSize( pGun ) )
{
AutoReload( pTeamSoldier );
}
}
else
{
// Search for gun in soldier inventory
UINT32 invsize = pTeamSoldier->inv.size();
for ( UINT32 bLoop2 = 0; bLoop2 < invsize; ++bLoop2 )
{
if ( (Item[pTeamSoldier->inv[bLoop2].usItem].usItemClass & (IC_GUN | IC_LAUNCHER)) )
{
pGun = &(pTeamSoldier->inv[bLoop2]);
UINT16 gunmagsize = GetMagSize( pGun );
//if magazine is not full
if ( (*pGun)[0]->data.gun.ubGunShotsLeft < gunmagsize )
{
// Search for ammo in soldier inventory
for ( UINT32 uiLoop = 0; uiLoop < invsize; ++uiLoop )
{
if ( (Item[pTeamSoldier->inv[uiLoop].usItem].usItemClass & IC_AMMO) ) // the item is ammo
{
pAmmo = &(pTeamSoldier->inv[uiLoop]);
if ( CompatibleAmmoForGun( pAmmo, pGun ) ) // can use the ammo with this gun
{
// same ammo type in gun and magazine
if ( Magazine[Item[(*pGun)[0]->data.gun.usGunAmmoItem].ubClassIndex].ubAmmoType == Magazine[Item[pAmmo->usItem].ubClassIndex].ubAmmoType )
{
ReloadGun( pTeamSoldier, pGun, pAmmo );
fCharacterInfoPanelDirty = TRUE;
fInterfacePanelDirty = DIRTYLEVEL2;
// if gun is full, we can stop this
if ( (*pGun)[0]->data.gun.ubGunShotsLeft >= gunmagsize )
break;
} }
} }
} }
@@ -8218,6 +8228,9 @@ void HandleTBReloadAll( void )
} }
} }
} }
}
}
}
} }
void HandleTBShowCover( void ) void HandleTBShowCover( void )
@@ -8311,9 +8324,9 @@ void HandleTBBackpacks(void)
bool backpackDropped = false; bool backpackDropped = false;
SOLDIERTYPE* pTeamSoldier; SOLDIERTYPE* pTeamSoldier;
for (UINT16 ubLoop = gTacticalStatus.Team[gbPlayerNum].bFirstID; ubLoop <= gTacticalStatus.Team[gbPlayerNum].bLastID; ubLoop++) for ( SoldierID ubLoop = gTacticalStatus.Team[gbPlayerNum].bFirstID; ubLoop <= gTacticalStatus.Team[gbPlayerNum].bLastID; ++ubLoop )
{ {
pTeamSoldier = MercPtrs[ubLoop]; pTeamSoldier = ubLoop;
if (OK_CONTROLLABLE_MERC(pTeamSoldier) && pTeamSoldier->flags.DropPackFlag) if (OK_CONTROLLABLE_MERC(pTeamSoldier) && pTeamSoldier->flags.DropPackFlag)
{ {
@@ -8336,31 +8349,30 @@ void HandleTBBackpacks(void)
void HandleTBDropBackpacks( void ) void HandleTBDropBackpacks( void )
{ {
//if( UsingNewInventorySystem() && gusSelectedSoldier != NOBODY ) //if( UsingNewInventorySystem() && gusSelectedSoldier != NOBODY )
if( UsingNewInventorySystem() ) if ( UsingNewInventorySystem() )
{ {
//SOLDIERTYPE *pSoldier = gusSelectedSoldier; //SOLDIERTYPE *pSoldier = gusSelectedSoldier;
SOLDIERTYPE *pTeamSoldier; SOLDIERTYPE *pTeamSoldier;
UINT16 ubLoop;
INT16 sAPCost = APBPConstants[AP_BACK_PACK]; INT16 sAPCost = APBPConstants[AP_BACK_PACK];
INT32 iBPCost = APBPConstants[BP_BACK_PACK]; INT32 iBPCost = APBPConstants[BP_BACK_PACK];
for( ubLoop = gTacticalStatus.Team[ gbPlayerNum ].bFirstID; ubLoop <= gTacticalStatus.Team[ gbPlayerNum ].bLastID; ubLoop++ ) for ( SoldierID ubLoop = gTacticalStatus.Team[gbPlayerNum].bFirstID; ubLoop <= gTacticalStatus.Team[gbPlayerNum].bLastID; ++ubLoop )
{ {
pTeamSoldier=MercPtrs[ ubLoop ]; pTeamSoldier = ubLoop;
if( OK_CONTROLLABLE_MERC( pTeamSoldier ) && if ( OK_CONTROLLABLE_MERC( pTeamSoldier ) &&
OK_INTERRUPT_MERC( pTeamSoldier ) && OK_INTERRUPT_MERC( pTeamSoldier ) &&
!AM_A_ROBOT( pTeamSoldier ) && !AM_A_ROBOT( pTeamSoldier ) &&
EnoughPoints(pTeamSoldier, sAPCost, iBPCost, FALSE) && EnoughPoints( pTeamSoldier, sAPCost, iBPCost, FALSE ) &&
//pTeamSoldier->bAssignment == pSoldier->bAssignment && //pTeamSoldier->bAssignment == pSoldier->bAssignment &&
pTeamSoldier->bAssignment < ON_DUTY && pTeamSoldier->bAssignment < ON_DUTY &&
pTeamSoldier->inv[BPACKPOCKPOS].exists() && pTeamSoldier->inv[BPACKPOCKPOS].exists() &&
!pTeamSoldier->flags.DropPackFlag ) !pTeamSoldier->flags.DropPackFlag )
{ {
if( ChangeDropPackStatus(pTeamSoldier, TRUE) ) if ( ChangeDropPackStatus( pTeamSoldier, TRUE ) )
{ {
ScreenMsg(FONT_MCOLOR_LTYELLOW, MSG_INTERFACE, NewInvMessage[NIV_SOLDIER_DROP], pTeamSoldier->GetName()); ScreenMsg( FONT_MCOLOR_LTYELLOW, MSG_INTERFACE, NewInvMessage[NIV_SOLDIER_DROP], pTeamSoldier->GetName() );
} }
} }
} }
@@ -8378,14 +8390,13 @@ void HandleTBPickUpBackpacks( void )
{ {
//SOLDIERTYPE *pSoldier = gusSelectedSoldier; //SOLDIERTYPE *pSoldier = gusSelectedSoldier;
SOLDIERTYPE *pTeamSoldier; SOLDIERTYPE *pTeamSoldier;
UINT16 ubLoop;
INT16 sAPCost = APBPConstants[AP_BACK_PACK]; INT16 sAPCost = APBPConstants[AP_BACK_PACK];
INT32 iBPCost = APBPConstants[BP_BACK_PACK]; INT32 iBPCost = APBPConstants[BP_BACK_PACK];
for( ubLoop = gTacticalStatus.Team[gbPlayerNum].bFirstID; ubLoop <= gTacticalStatus.Team[gbPlayerNum].bLastID; ubLoop++ ) for( SoldierID ubLoop = gTacticalStatus.Team[gbPlayerNum].bFirstID; ubLoop <= gTacticalStatus.Team[gbPlayerNum].bLastID; ++ubLoop )
{ {
pTeamSoldier=MercPtrs[ubLoop]; pTeamSoldier = ubLoop;
if( OK_CONTROLLABLE_MERC( pTeamSoldier ) && if( OK_CONTROLLABLE_MERC( pTeamSoldier ) &&
OK_INTERRUPT_MERC( pTeamSoldier ) && OK_INTERRUPT_MERC( pTeamSoldier ) &&
@@ -9602,7 +9613,6 @@ void HandleTBPickUpBackpacks(BOOLEAN fAll)
{ {
SOLDIERTYPE* pSoldier = NULL; SOLDIERTYPE* pSoldier = NULL;
SOLDIERTYPE* pTeamSoldier; SOLDIERTYPE* pTeamSoldier;
UINT16 ubLoop;
if (gusSelectedSoldier != NOBODY) if (gusSelectedSoldier != NOBODY)
{ {
@@ -9612,9 +9622,9 @@ void HandleTBPickUpBackpacks(BOOLEAN fAll)
INT16 sAPCost = APBPConstants[AP_BACK_PACK]; INT16 sAPCost = APBPConstants[AP_BACK_PACK];
INT32 iBPCost = APBPConstants[BP_BACK_PACK]; INT32 iBPCost = APBPConstants[BP_BACK_PACK];
for (ubLoop = gTacticalStatus.Team[gbPlayerNum].bFirstID; ubLoop <= gTacticalStatus.Team[gbPlayerNum].bLastID; ubLoop++) for ( SoldierID ubLoop = gTacticalStatus.Team[gbPlayerNum].bFirstID; ubLoop <= gTacticalStatus.Team[gbPlayerNum].bLastID; ++ubLoop )
{ {
pTeamSoldier = MercPtrs[ubLoop]; pTeamSoldier = ubLoop;
if (pTeamSoldier && if (pTeamSoldier &&
OK_CONTROLLABLE_MERC(pTeamSoldier) && OK_CONTROLLABLE_MERC(pTeamSoldier) &&
+6 -8
View File
@@ -1718,15 +1718,15 @@ BOOLEAN EnterVehicle( SOLDIERTYPE *pVehicle, SOLDIERTYPE *pSoldier, UINT8 ubSeat
SOLDIERTYPE *GetVehicleSoldierPointerFromPassenger( SOLDIERTYPE *pSrcSoldier ) SOLDIERTYPE *GetVehicleSoldierPointerFromPassenger( SOLDIERTYPE *pSrcSoldier )
{ {
UINT32 cnt; SOLDIERTYPE *pSoldier;
SOLDIERTYPE *pSoldier;
// End the turn of player charactors // End the turn of player charactors
cnt = gTacticalStatus.Team[ gbPlayerNum ].bFirstID; SoldierID cnt = gTacticalStatus.Team[ gbPlayerNum ].bFirstID;
// look for all mercs on the same team, // look for all mercs on the same team,
for ( pSoldier = MercPtrs[ cnt ]; cnt <= gTacticalStatus.Team[ gbPlayerNum ].bLastID; cnt++,pSoldier++) for ( ; cnt <= gTacticalStatus.Team[ gbPlayerNum ].bLastID; ++cnt )
{ {
pSoldier = cnt;
if ( pSoldier->bActive && pSoldier->flags.uiStatusFlags & SOLDIER_VEHICLE ) if ( pSoldier->bActive && pSoldier->flags.uiStatusFlags & SOLDIER_VEHICLE )
{ {
// Check ubID.... // Check ubID....
@@ -2906,14 +2906,12 @@ BOOLEAN SoldierMustDriveVehicle( SOLDIERTYPE *pSoldier, INT32 iVehicleId, BOOLEA
BOOLEAN OnlythisCanDriveVehicle( SOLDIERTYPE *pthis, INT32 iVehicleId ) BOOLEAN OnlythisCanDriveVehicle( SOLDIERTYPE *pthis, INT32 iVehicleId )
{ {
INT32 iCounter = 0;
SOLDIERTYPE *pSoldier = NULL; SOLDIERTYPE *pSoldier = NULL;
for( SoldierID id = gTacticalStatus.Team[ OUR_TEAM ].bFirstID; id <= gTacticalStatus.Team[ OUR_TEAM ].bLastID; ++id )
for( iCounter = gTacticalStatus.Team[ OUR_TEAM ].bFirstID; iCounter <= gTacticalStatus.Team[ OUR_TEAM ].bLastID; iCounter++ )
{ {
// get the current soldier // get the current soldier
pSoldier = &Menptr[ iCounter ]; pSoldier = id;
// skip checking THIS soldier, we wanna know about everyone else // skip checking THIS soldier, we wanna know about everyone else
if ( pSoldier == pthis ) if ( pSoldier == pthis )
+155 -160
View File
@@ -989,61 +989,61 @@ void HandleSight(SOLDIERTYPE *pSoldier, UINT8 ubSightFlags)
void OurTeamRadiosRandomlyAbout(UINT16 ubAbout) void OurTeamRadiosRandomlyAbout(UINT16 ubAbout)
{ {
INT32 iLoop; // WDS - make number of mercenaries, etc. be configurable
// WDS - make number of mercenaries, etc. be configurable INT16 radioCnt = 0,radioMan[CODE_MAXIMUM_NUMBER_OF_PLAYER_SLOTS];
INT16 radioCnt = 0,radioMan[CODE_MAXIMUM_NUMBER_OF_PLAYER_SLOTS]; SOLDIERTYPE *pSoldier;
SOLDIERTYPE *pSoldier;
// Temporary for opplist synching - disable random order radioing // Temporary for opplist synching - disable random order radioing
#ifdef RECORDOPPLIST #ifdef RECORDOPPLIST
for (iLoop = Status.team[Net.pnum].guystart,ourPtr = MercPtrs[iLoop]; iLoop < Status.team[Net.pnum].guyend; iLoop++,ourPtr++) for (iLoop = Status.team[Net.pnum].guystart,ourPtr = MercPtrs[iLoop]; iLoop < Status.team[Net.pnum].guyend; iLoop++,ourPtr++)
{ {
// if this merc is active, in this sector, and well enough to look // if this merc is active, in this sector, and well enough to look
if (pSoldier->active && pSoldier->bInSector && (pSoldier->stats.bLife >= OKLIFE)) if (pSoldier->active && pSoldier->bInSector && (pSoldier->stats.bLife >= OKLIFE))
{ {
RadioSightings(pSoldier,ubAbout,pSoldier->bTeam); RadioSightings(pSoldier,ubAbout,pSoldier->bTeam);
pSoldier->bNewOppCnt = 0; pSoldier->bNewOppCnt = 0;
} }
} }
return; return;
#endif #endif
// All mercs on our local team check if they should radio about him // All mercs on our local team check if they should radio about him
iLoop = gTacticalStatus.Team[gbPlayerNum].bFirstID; SoldierID id = gTacticalStatus.Team[gbPlayerNum].bFirstID;
// make a list of all of our team's mercs // make a list of all of our team's mercs
for (pSoldier = MercPtrs[iLoop]; iLoop <= gTacticalStatus.Team[gbPlayerNum].bLastID; iLoop++,pSoldier++) for ( ; id <= gTacticalStatus.Team[gbPlayerNum].bLastID; ++id )
{ {
// if this merc is active, in this sector, and well enough to look pSoldier = id;
if (pSoldier->bActive && pSoldier->bInSector && (pSoldier->stats.bLife >= OKLIFE)) // if this merc is active, in this sector, and well enough to look
// put him on our list, and increment the counter if (pSoldier->bActive && pSoldier->bInSector && (pSoldier->stats.bLife >= OKLIFE))
radioMan[radioCnt++] = (INT16)iLoop; // put him on our list, and increment the counter
radioMan[radioCnt++] = (INT16)id;
} }
// now RANDOMLY handle each of the mercs on our list, until none remain // now RANDOMLY handle each of the mercs on our list, until none remain
// (this is all being done ONLY so that the mercs in the earliest merc // (this is all being done ONLY so that the mercs in the earliest merc
// slots do not arbitrarily get the bulk of the sighting speech quote // slots do not arbitrarily get the bulk of the sighting speech quote
// action, while the later ones almost never pipe up, and is NOT // action, while the later ones almost never pipe up, and is NOT
// strictly necessary, but a nice improvement over original JA) // strictly necessary, but a nice improvement over original JA)
while (radioCnt) while (radioCnt)
{ {
// pick a merc from one of the remaining slots at random // pick a merc from one of the remaining slots at random
iLoop = Random(radioCnt); INT16 iLoop = Random(radioCnt);
// handle radioing for that merc // handle radioing for that merc
RadioSightings(MercPtrs[radioMan[iLoop]],ubAbout,MercPtrs[radioMan[iLoop]]->bTeam); RadioSightings( MercPtrs[radioMan[iLoop]], ubAbout, MercPtrs[radioMan[iLoop]]->bTeam );
Menptr[radioMan[iLoop]].bNewOppCnt = 0; Menptr[radioMan[iLoop]].bNewOppCnt = 0;
// unless it WAS the last used slot that we happened to pick // unless it WAS the last used slot that we happened to pick
if (iLoop != (radioCnt - 1)) if (iLoop != (radioCnt - 1))
// move the contents of the last slot into the one just handled // move the contents of the last slot into the one just handled
radioMan[iLoop] = radioMan[radioCnt - 1]; radioMan[iLoop] = radioMan[radioCnt - 1];
radioCnt--; radioCnt--;
} }
} }
@@ -1058,71 +1058,69 @@ INT16 radioCnt = 0,radioMan[CODE_MAXIMUM_NUMBER_OF_PLAYER_SLOTS];
INT16 TeamNoLongerSeesMan( UINT8 ubTeam, SOLDIERTYPE *pOpponent, UINT16 ubExcludeID, INT8 bIteration ) INT16 TeamNoLongerSeesMan( UINT8 ubTeam, SOLDIERTYPE *pOpponent, UINT16 ubExcludeID, INT8 bIteration )
{ {
UINT16 bLoop;
SOLDIERTYPE *pMate; SOLDIERTYPE *pMate;
SoldierID bLoop = gTacticalStatus.Team[ubTeam].bFirstID;
bLoop = gTacticalStatus.Team[ubTeam].bFirstID;
// look for all mercs on the same team, check opplists for this soldier // look for all mercs on the same team, check opplists for this soldier
for (pMate = MercPtrs[bLoop]; bLoop <= gTacticalStatus.Team[ubTeam].bLastID; ++bLoop,pMate++) for ( ; bLoop <= gTacticalStatus.Team[ubTeam].bLastID; ++bLoop )
{ {
pMate = bLoop;
// if this "teammate" is me, myself, or I (whom we want to exclude) // if this "teammate" is me, myself, or I (whom we want to exclude)
if (bLoop == ubExcludeID) if ( bLoop == ubExcludeID )
continue; // skip to next teammate, I KNOW I don't see him... continue; // skip to next teammate, I KNOW I don't see him...
// if this merc is not on the same team // if this merc is not on the same team
if (pMate->bTeam != ubTeam) if ( pMate->bTeam != ubTeam )
continue; // skip him, he's no teammate at all! continue; // skip him, he's no teammate at all!
// if this merc is not active, at base, on assignment, dead, unconscious // if this merc is not active, at base, on assignment, dead, unconscious
if (!pMate->bActive || !pMate->bInSector || (pMate->stats.bLife < OKLIFE)) if ( !pMate->bActive || !pMate->bInSector || (pMate->stats.bLife < OKLIFE) )
continue; // next merc continue; // next merc
// if this teammate currently sees this opponent // if this teammate currently sees this opponent
if (pMate->aiData.bOppList[pOpponent->ubID] == SEEN_CURRENTLY) if ( pMate->aiData.bOppList[pOpponent->ubID] == SEEN_CURRENTLY )
return(FALSE); // that's all I need to know, get out of here return(FALSE); // that's all I need to know, get out of here
} }
/* comm by ddd /* comm by ddd
#ifdef WE_SEE_WHAT_MILITIA_SEES_AND_VICE_VERSA #ifdef WE_SEE_WHAT_MILITIA_SEES_AND_VICE_VERSA
if ( bIteration == 0 ) if ( bIteration == 0 )
{
if ( ubTeam == gbPlayerNum && gTacticalStatus.Team[ MILITIA_TEAM ].bTeamActive )
{
// check militia team as well
return( TeamNoLongerSeesMan( MILITIA_TEAM, pOpponent, ubExcludeID, 1 ) );
}
else if ( ubTeam == MILITIA_TEAM && gTacticalStatus.Team[ gbPlayerNum ].bTeamActive )
{
// check player team as well
return( TeamNoLongerSeesMan( gbPlayerNum, pOpponent, ubExcludeID, 1 ) );
}
}
#endif
*/
//ddd
if ( gGameExternalOptions.bWeSeeWhatMilitiaSeesAndViceVersa )
{ {
if ( ubTeam == gbPlayerNum && gTacticalStatus.Team[ MILITIA_TEAM ].bTeamActive ) if ( bIteration == 0 )
{ {
// check militia team as well if ( ubTeam == gbPlayerNum && gTacticalStatus.Team[MILITIA_TEAM].bTeamActive )
return( TeamNoLongerSeesMan( MILITIA_TEAM, pOpponent, ubExcludeID, 1 ) ); {
// check militia team as well
return(TeamNoLongerSeesMan( MILITIA_TEAM, pOpponent, ubExcludeID, 1 ));
}
else if ( ubTeam == MILITIA_TEAM && gTacticalStatus.Team[gbPlayerNum].bTeamActive )
{
// check player team as well
return(TeamNoLongerSeesMan( gbPlayerNum, pOpponent, ubExcludeID, 1 ));
}
} }
else if ( ubTeam == MILITIA_TEAM && gTacticalStatus.Team[ gbPlayerNum ].bTeamActive )
{
// check player team as well
return( TeamNoLongerSeesMan( gbPlayerNum, pOpponent, ubExcludeID, 1 ) );
}
}
#endif
*/
//ddd
if(gGameExternalOptions.bWeSeeWhatMilitiaSeesAndViceVersa)
{
if ( bIteration == 0 )
{
if ( ubTeam == gbPlayerNum && gTacticalStatus.Team[ MILITIA_TEAM ].bTeamActive )
{
// check militia team as well
return( TeamNoLongerSeesMan( MILITIA_TEAM, pOpponent, ubExcludeID, 1 ) );
}
else if ( ubTeam == MILITIA_TEAM && gTacticalStatus.Team[ gbPlayerNum ].bTeamActive )
{
// check player team as well
return( TeamNoLongerSeesMan( gbPlayerNum, pOpponent, ubExcludeID, 1 ) );
}
}
} }
//ddd //ddd
// none of my friends is currently seeing the guy, so return success // none of my friends is currently seeing the guy, so return success
return(TRUE); return(TRUE);
} }
INT16 DistanceSmellable( SOLDIERTYPE *pSoldier, SOLDIERTYPE * pSubject ) INT16 DistanceSmellable( SOLDIERTYPE *pSoldier, SOLDIERTYPE * pSubject )
@@ -1524,12 +1522,11 @@ void TurnOffEveryonesMuzzleFlashes( void )
void TurnOffTeamsMuzzleFlashes( UINT8 ubTeam ) void TurnOffTeamsMuzzleFlashes( UINT8 ubTeam )
{ {
UINT16 ubLoop;
SOLDIERTYPE * pSoldier; SOLDIERTYPE * pSoldier;
for (ubLoop = gTacticalStatus.Team[ ubTeam ].bFirstID; ubLoop <= gTacticalStatus.Team[ ubTeam ].bLastID; ubLoop++) for ( SoldierID ubLoop = gTacticalStatus.Team[ ubTeam ].bFirstID; ubLoop <= gTacticalStatus.Team[ ubTeam ].bLastID; ++ubLoop )
{ {
pSoldier = MercPtrs[ ubLoop ]; pSoldier = ubLoop;
if ( pSoldier->flags.fMuzzleFlash ) if ( pSoldier->flags.fMuzzleFlash )
{ {
@@ -1638,15 +1635,14 @@ void InitOpplistForDoorOpening( void )
void AllTeamsLookForAll(UINT8 ubAllowInterrupts) void AllTeamsLookForAll(UINT8 ubAllowInterrupts)
{ {
UINT32 uiLoop; SOLDIERTYPE *pSoldier;
SOLDIERTYPE *pSoldier;
if( ( gTacticalStatus.uiFlags & LOADING_SAVED_GAME ) ) if ( (gTacticalStatus.uiFlags & LOADING_SAVED_GAME) )
{ {
return; return;
} }
if (ubAllowInterrupts || !(gTacticalStatus.uiFlags & INCOMBAT) ) if ( ubAllowInterrupts || !(gTacticalStatus.uiFlags & INCOMBAT) )
{ {
gubBestToMakeSightingSize = BEST_SIGHTING_ARRAY_SIZE_ALL_TEAMS_LOOK_FOR_ALL; gubBestToMakeSightingSize = BEST_SIGHTING_ARRAY_SIZE_ALL_TEAMS_LOOK_FOR_ALL;
if ( gfDelayResolvingBestSightingDueToDoor ) if ( gfDelayResolvingBestSightingDueToDoor )
@@ -1661,20 +1657,20 @@ void AllTeamsLookForAll(UINT8 ubAllowInterrupts)
} }
} }
for (uiLoop = 0; uiLoop < guiNumMercSlots; uiLoop++) for ( UINT16 uiLoop = 0; uiLoop < guiNumMercSlots; ++uiLoop )
{ {
pSoldier = MercSlots[ uiLoop ]; pSoldier = MercSlots[uiLoop];
if ( pSoldier != NULL && pSoldier->stats.bLife >= OKLIFE ) if ( pSoldier != NULL && pSoldier->stats.bLife >= OKLIFE )
{ {
HandleSight(pSoldier,SIGHT_LOOK); // no radio or interrupts yet HandleSight( pSoldier, SIGHT_LOOK ); // no radio or interrupts yet
} }
} }
// the player team now radios about all sightings // the player team now radios about all sightings
for ( uiLoop = gTacticalStatus.Team[ gbPlayerNum ].bFirstID; uiLoop <= gTacticalStatus.Team[ gbPlayerNum ].bLastID; uiLoop++ ) for ( SoldierID uiLoop = gTacticalStatus.Team[gbPlayerNum].bFirstID; uiLoop <= gTacticalStatus.Team[gbPlayerNum].bLastID; ++uiLoop )
{ {
HandleSight( MercPtrs[ uiLoop ], SIGHT_RADIO ); // looking was done above HandleSight( uiLoop, SIGHT_RADIO ); // looking was done above
} }
if ( !(gTacticalStatus.uiFlags & INCOMBAT) ) if ( !(gTacticalStatus.uiFlags & INCOMBAT) )
@@ -1698,52 +1694,52 @@ void AllTeamsLookForAll(UINT8 ubAllowInterrupts)
gubBestToMakeSightingSize = BEST_SIGHTING_ARRAY_SIZE_INCOMBAT; gubBestToMakeSightingSize = BEST_SIGHTING_ARRAY_SIZE_INCOMBAT;
} }
/* /*
// do this here as well as in overhead so the looks/interrupts are combined! // do this here as well as in overhead so the looks/interrupts are combined!
// if a door was recently opened/closed (doesn't matter if we could see it) // if a door was recently opened/closed (doesn't matter if we could see it)
// this is done here so we can first handle everyone looking through the // this is done here so we can first handle everyone looking through the
// door, and deal with the resulting opplist changes, interrupts, etc. // door, and deal with the resulting opplist changes, interrupts, etc.
if ( !TileIsOutOfBounds(Status.doorCreakedGridno)) if ( !TileIsOutOfBounds(Status.doorCreakedGridno))
{ {
// opening/closing a door makes a bit of noise (constant volume) // opening/closing a door makes a bit of noise (constant volume)
MakeNoise(Status.doorCreakedGuynum,Status.doorCreakedGridno,TTypeList[Grid[Status.doorCreakedGridno].land],DOOR_NOISE_VOLUME,NOISE_CREAKING,EXPECTED_NOSEND); MakeNoise(Status.doorCreakedGuynum,Status.doorCreakedGridno,TTypeList[Grid[Status.doorCreakedGridno].land],DOOR_NOISE_VOLUME,NOISE_CREAKING,EXPECTED_NOSEND);
Status.doorCreakedGridno = NOWHERE; Status.doorCreakedGridno = NOWHERE;
Status.doorCreakedGuynum = NOBODY; Status.doorCreakedGuynum = NOBODY;
} }
// all soldiers now radio their findings (NO interrupts permitted this early!) // all soldiers now radio their findings (NO interrupts permitted this early!)
// NEW: our entire team must radio first, so that they radio about EVERYBODY // NEW: our entire team must radio first, so that they radio about EVERYBODY
// rather radioing about individuals one a a time (repeats see 1 enemy quote) // rather radioing about individuals one a a time (repeats see 1 enemy quote)
for (cnt = Status.team[Net.pnum].guystart,ptr = MercPtrs[cnt]; cnt < Status.team[Net.pnum].guyend; cnt++,ptr++) for (cnt = Status.team[Net.pnum].guystart,ptr = MercPtrs[cnt]; cnt < Status.team[Net.pnum].guyend; cnt++,ptr++)
{ {
if (ptr->active && ptr->in_sector && (ptr->life >= OKLIFE)) if (ptr->active && ptr->in_sector && (ptr->life >= OKLIFE))
HandleSight(ptr,SIGHT_RADIO); // looking was done above HandleSight(ptr,SIGHT_RADIO); // looking was done above
} }
for (cnt = 0,ptr = Menptr; cnt < MAXMERCS; cnt++,ptr++) for (cnt = 0,ptr = Menptr; cnt < MAXMERCS; cnt++,ptr++)
{ {
if (ptr->active && ptr->in_sector && (ptr->life >= OKLIFE) && !PTR_OURTEAM) if (ptr->active && ptr->in_sector && (ptr->life >= OKLIFE) && !PTR_OURTEAM)
HandleSight(ptr,SIGHT_RADIO); // looking was done above HandleSight(ptr,SIGHT_RADIO); // looking was done above
} }
// if interrupts were allowed // if interrupts were allowed
if (allowInterrupts) if (allowInterrupts)
// resolve interrupts against the selected character (others disallowed) // resolve interrupts against the selected character (others disallowed)
HandleSight(MercPtrs[Status.allLookCharacter],SIGHT_INTERRUPT); HandleSight(MercPtrs[Status.allLookCharacter],SIGHT_INTERRUPT);
// revert to normal interrupt operation // revert to normal interrupt operation
InterruptOnlyGuynum = NOBODY; InterruptOnlyGuynum = NOBODY;
InterruptsAllowed = TRUE; InterruptsAllowed = TRUE;
*/ */
// reset interrupt only guynum which may have been used // reset interrupt only guynum which may have been used
gubInterruptProvoker = NOBODY; gubInterruptProvoker = NOBODY;
} }
@@ -3115,7 +3111,7 @@ void RemoveManAsTarget(SOLDIERTYPE *pSoldier)
void UpdatePublic(UINT8 ubTeam, SoldierID ubID, INT8 bNewOpplist, INT32 sGridNo, INT8 bLevel) void UpdatePublic(UINT8 ubTeam, SoldierID ubID, INT8 bNewOpplist, INT32 sGridNo, INT8 bLevel)
{ {
INT32 cnt; SoldierID cnt;
UINT8 ubTeamMustLookAgain = FALSE, ubMadeDifference = FALSE; UINT8 ubTeamMustLookAgain = FALSE, ubMadeDifference = FALSE;
SOLDIERTYPE *pSoldier; SOLDIERTYPE *pSoldier;
INT8* pbPublOL = &(gbPublicOpplist[ubTeam][ubID]); INT8* pbPublOL = &(gbPublicOpplist[ubTeam][ubID]);
@@ -3143,8 +3139,9 @@ void UpdatePublic(UINT8 ubTeam, SoldierID ubID, INT8 bNewOpplist, INT32 sGridNo,
// then everyone on team who's not aware of guynum must look for him // then everyone on team who's not aware of guynum must look for him
cnt = gTacticalStatus.Team[ubTeam].bFirstID; cnt = gTacticalStatus.Team[ubTeam].bFirstID;
for (pSoldier = MercPtrs[cnt]; cnt <= gTacticalStatus.Team[ubTeam].bLastID; ++cnt, pSoldier++) for ( ; cnt <= gTacticalStatus.Team[ubTeam].bLastID; ++cnt )
{ {
pSoldier = cnt;
// if this soldier is active, in this sector, and well enough to look // if this soldier is active, in this sector, and well enough to look
if (pSoldier->bActive && pSoldier->bInSector && (pSoldier->stats.bLife >= OKLIFE) && !( pSoldier->flags.uiStatusFlags & SOLDIER_GASSED ) ) if (pSoldier->bActive && pSoldier->bInSector && (pSoldier->stats.bLife >= OKLIFE) && !( pSoldier->flags.uiStatusFlags & SOLDIER_GASSED ) )
{ {
@@ -5719,7 +5716,6 @@ void TheirNoise( SoldierID ubNoiseMaker, INT32 sGridNo, INT8 bLevel, UINT8 ubTer
void ProcessNoise( SoldierID ubNoiseMaker, INT32 sGridNo, INT8 bLevel, UINT8 ubTerrType, UINT8 ubBaseVolume, UINT8 ubNoiseType, STR16 zNoiseMessage ) void ProcessNoise( SoldierID ubNoiseMaker, INT32 sGridNo, INT8 bLevel, UINT8 ubTerrType, UINT8 ubBaseVolume, UINT8 ubNoiseType, STR16 zNoiseMessage )
{ {
SOLDIERTYPE *pSoldier; SOLDIERTYPE *pSoldier;
UINT16 bLoop;
UINT8 bTeam; UINT8 bTeam;
UINT8 ubLoudestEffVolume, ubEffVolume; UINT8 ubLoudestEffVolume, ubEffVolume;
// UINT8 ubPlayVolume; // UINT8 ubPlayVolume;
@@ -5923,8 +5919,9 @@ void ProcessNoise( SoldierID ubNoiseMaker, INT32 sGridNo, INT8 bLevel, UINT8 ubT
ubHeardLoudestBy = NOBODY; ubHeardLoudestBy = NOBODY;
// All mercs on this team check if they are eligible to hear this noise // All mercs on this team check if they are eligible to hear this noise
for (bLoop = gTacticalStatus.Team[bTeam].bFirstID,pSoldier = Menptr + bLoop; bLoop <= gTacticalStatus.Team[bTeam].bLastID; bLoop++,pSoldier++) for ( SoldierID bLoop = gTacticalStatus.Team[bTeam].bFirstID; bLoop <= gTacticalStatus.Team[bTeam].bLastID; ++bLoop )
{ {
pSoldier = bLoop;
// if this "listener" is inactive, or in no condition to care // if this "listener" is inactive, or in no condition to care
if (!pSoldier->bActive || !pSoldier->bInSector || pSoldier->flags.uiStatusFlags & SOLDIER_DEAD || (pSoldier->stats.bLife < OKLIFE) || pSoldier->ubBodyType == LARVAE_MONSTER) if (!pSoldier->bActive || !pSoldier->bInSector || pSoldier->flags.uiStatusFlags & SOLDIER_DEAD || (pSoldier->stats.bLife < OKLIFE) || pSoldier->ubBodyType == LARVAE_MONSTER)
{ {
@@ -7439,15 +7436,15 @@ void NoticeUnseenAttacker( SOLDIERTYPE * pAttacker, SOLDIERTYPE * pDefender, INT
void CheckForAlertWhenEnemyDies( SOLDIERTYPE * pDyingSoldier ) void CheckForAlertWhenEnemyDies( SOLDIERTYPE * pDyingSoldier )
{ {
UINT16 ubID; SoldierID ubID;
SOLDIERTYPE * pSoldier; SOLDIERTYPE * pSoldier;
INT8 bDir; INT8 bDir;
INT16 sDistAway, sDistVisible; INT16 sDistAway, sDistVisible;
for ( ubID = gTacticalStatus.Team[ pDyingSoldier->bTeam ].bFirstID; ubID <= gTacticalStatus.Team[ pDyingSoldier->bTeam ].bLastID; ubID++ ) for ( ubID = gTacticalStatus.Team[ pDyingSoldier->bTeam ].bFirstID; ubID <= gTacticalStatus.Team[ pDyingSoldier->bTeam ].bLastID; ++ubID )
{ {
pSoldier = MercPtrs[ ubID ]; pSoldier = ubID;
if ( pSoldier->bActive && pSoldier->bInSector && (pSoldier != pDyingSoldier) && (pSoldier->stats.bLife >= OKLIFE) && (pSoldier->aiData.bAlertStatus < STATUS_RED ) ) if ( pSoldier->bActive && pSoldier->bInSector && (pSoldier != pDyingSoldier) && (pSoldier->stats.bLife >= OKLIFE) && (pSoldier->aiData.bAlertStatus < STATUS_RED ) )
{ {
@@ -7470,22 +7467,20 @@ void CheckForAlertWhenEnemyDies( SOLDIERTYPE * pDyingSoldier )
} }
} }
} }
} }
} }
BOOLEAN ArmyKnowsOfPlayersPresence( void ) BOOLEAN ArmyKnowsOfPlayersPresence( void )
{ {
UINT16 ubID; SoldierID ubID;
SOLDIERTYPE * pSoldier; SOLDIERTYPE * pSoldier;
// if anyone is still left... // if anyone is still left...
if (gTacticalStatus.Team[ ENEMY_TEAM ].bTeamActive && gTacticalStatus.Team[ ENEMY_TEAM ].bMenInSector > 0 ) if (gTacticalStatus.Team[ ENEMY_TEAM ].bTeamActive && gTacticalStatus.Team[ ENEMY_TEAM ].bMenInSector > 0 )
{ {
for ( ubID = gTacticalStatus.Team[ ENEMY_TEAM ].bFirstID; ubID <= gTacticalStatus.Team[ ENEMY_TEAM ].bLastID; ubID++ ) for ( ubID = gTacticalStatus.Team[ ENEMY_TEAM ].bFirstID; ubID <= gTacticalStatus.Team[ ENEMY_TEAM ].bLastID; ++ubID )
{ {
pSoldier = MercPtrs[ ubID ]; pSoldier = ubID;
if ( pSoldier->bActive && pSoldier->bInSector && (pSoldier->stats.bLife >= OKLIFE) && (pSoldier->aiData.bAlertStatus >= STATUS_RED ) ) if ( pSoldier->bActive && pSoldier->bInSector && (pSoldier->stats.bLife >= OKLIFE) && (pSoldier->aiData.bAlertStatus >= STATUS_RED ) )
{ {
@@ -7498,19 +7493,19 @@ BOOLEAN ArmyKnowsOfPlayersPresence( void )
BOOLEAN MercSeesCreature( SOLDIERTYPE * pSoldier ) BOOLEAN MercSeesCreature( SOLDIERTYPE * pSoldier )
{ {
UINT16 ubID; SoldierID ubID;
if (pSoldier->aiData.bOppCnt > 0) if ( pSoldier->aiData.bOppCnt > 0 )
{ {
for ( ubID = gTacticalStatus.Team[ CREATURE_TEAM ].bFirstID; ubID <= gTacticalStatus.Team[ CREATURE_TEAM ].bLastID; ubID++ ) for ( ubID = gTacticalStatus.Team[CREATURE_TEAM].bFirstID; ubID <= gTacticalStatus.Team[CREATURE_TEAM].bLastID; ++ubID )
{ {
if ( (pSoldier->aiData.bOppList[ ubID ] == SEEN_CURRENTLY) && (MercPtrs[ ubID ]->flags.uiStatusFlags & SOLDIER_MONSTER) ) if ( (pSoldier->aiData.bOppList[ubID] == SEEN_CURRENTLY) && (ubID->flags.uiStatusFlags & SOLDIER_MONSTER) )
{ {
return( TRUE ); return(TRUE);
} }
} }
} }
return( FALSE ); return(FALSE);
} }
@@ -7626,14 +7621,14 @@ INT8 GetHighestWatchedLocPoints( UINT16 ubID )
void CommunicateWatchedLoc( SoldierID ubID, INT32 sGridNo, INT8 bLevel, UINT8 ubPoints ) void CommunicateWatchedLoc( SoldierID ubID, INT32 sGridNo, INT8 bLevel, UINT8 ubPoints )
{ {
UINT16 ubLoop; SoldierID ubLoop;
INT8 bTeam, bLoopPoint, bPoint; INT8 bTeam, bLoopPoint, bPoint;
bTeam = ubID->bTeam; bTeam = ubID->bTeam;
for ( ubLoop = gTacticalStatus.Team[ bTeam ].bFirstID; ubLoop <= gTacticalStatus.Team[ bTeam ].bLastID; ubLoop++ ) for ( ubLoop = gTacticalStatus.Team[ bTeam ].bFirstID; ubLoop <= gTacticalStatus.Team[ bTeam ].bLastID; ++ubLoop )
{ {
SOLDIERTYPE *pSoldier = MercPtrs[ubLoop]; SOLDIERTYPE *pSoldier = ubLoop;
if ( ubLoop == ubID || pSoldier->bActive == FALSE || pSoldier->bInSector == FALSE || pSoldier->stats.bLife < OKLIFE ) if ( ubLoop == ubID || pSoldier->bActive == FALSE || pSoldier->bInSector == FALSE || pSoldier->stats.bLife < OKLIFE )
{ {
continue; continue;
@@ -7784,13 +7779,13 @@ void DecayWatchedLocs( INT8 bTeam )
void MakeBloodcatsHostile( void ) void MakeBloodcatsHostile( void )
{ {
INT32 iLoop; SOLDIERTYPE *pSoldier;
SOLDIERTYPE * pSoldier; SoldierID id = gTacticalStatus.Team[ CREATURE_TEAM ].bFirstID;
iLoop = gTacticalStatus.Team[ CREATURE_TEAM ].bFirstID; for ( ; id <= gTacticalStatus.Team[ CREATURE_TEAM ].bLastID; ++id )
for (pSoldier = MercPtrs[iLoop]; iLoop <= gTacticalStatus.Team[ CREATURE_TEAM ].bLastID; ++iLoop, ++pSoldier )
{ {
pSoldier = id;
if ( pSoldier->ubBodyType == BLOODCAT && pSoldier->bActive && pSoldier->bInSector && pSoldier->stats.bLife > 0 ) if ( pSoldier->ubBodyType == BLOODCAT && pSoldier->bActive && pSoldier->bInSector && pSoldier->stats.bLife > 0 )
{ {
SetSoldierNonNeutral( pSoldier ); SetSoldierNonNeutral( pSoldier );
+7 -10
View File
@@ -874,8 +874,6 @@ void HandleSoldierAI( SOLDIERTYPE *pSoldier ) // FIXME - this function is named
void EndAIGuysTurn( SOLDIERTYPE *pSoldier ) void EndAIGuysTurn( SOLDIERTYPE *pSoldier )
{ {
UINT16 ubID;
if (gfTurnBasedAI) if (gfTurnBasedAI)
{ {
if (gTacticalStatus.uiFlags & PLAYER_TEAM_DEAD) if (gTacticalStatus.uiFlags & PLAYER_TEAM_DEAD)
@@ -885,9 +883,9 @@ void EndAIGuysTurn( SOLDIERTYPE *pSoldier )
} }
// search for any player merc to say close call quote // search for any player merc to say close call quote
for ( ubID = gTacticalStatus.Team[ gbPlayerNum ].bFirstID; ubID <= gTacticalStatus.Team[ gbPlayerNum ].bLastID; ++ubID ) for ( SoldierID ubID = gTacticalStatus.Team[ gbPlayerNum ].bFirstID; ubID <= gTacticalStatus.Team[ gbPlayerNum ].bLastID; ++ubID )
{ {
SOLDIERTYPE *pMerc = MercPtrs[ubID]; SOLDIERTYPE *pMerc = ubID;
if ( OK_INSECTOR_MERC( pMerc ) ) if ( OK_INSECTOR_MERC( pMerc ) )
{ {
@@ -941,10 +939,10 @@ void EndAIGuysTurn( SOLDIERTYPE *pSoldier )
#endif #endif
// find the next AI guy // find the next AI guy
ubID = RemoveFirstAIListEntry(); SoldierID ubID = RemoveFirstAIListEntry();
if (ubID != NOBODY) if (ubID != NOBODY)
{ {
StartNPCAI( MercPtrs[ ubID ] ); StartNPCAI( ubID );
return; return;
} }
@@ -1119,14 +1117,13 @@ void StartNPCAI(SOLDIERTYPE *pSoldier)
BOOLEAN DestNotSpokenFor(SOLDIERTYPE *pSoldier, INT32 sGridNo) BOOLEAN DestNotSpokenFor(SOLDIERTYPE *pSoldier, INT32 sGridNo)
{ {
INT32 cnt;
SOLDIERTYPE *pOurTeam; SOLDIERTYPE *pOurTeam;
SoldierID cnt = gTacticalStatus.Team[pSoldier->bTeam].bFirstID;
cnt = gTacticalStatus.Team[pSoldier->bTeam].bFirstID;
// make a list of all of our team's mercs // make a list of all of our team's mercs
for (pOurTeam = MercPtrs[cnt]; cnt <= gTacticalStatus.Team[pSoldier->bTeam].bLastID; cnt++,pOurTeam++) for ( ; cnt <= gTacticalStatus.Team[pSoldier->bTeam].bLastID; ++cnt )
{ {
pOurTeam = cnt;
if ( pOurTeam->bActive ) if ( pOurTeam->bActive )
{ {
if (pOurTeam->sGridNo == sGridNo || pOurTeam->aiData.usActionData == sGridNo) if (pOurTeam->sGridNo == sGridNo || pOurTeam->aiData.usActionData == sGridNo)
+43 -52
View File
@@ -1703,18 +1703,17 @@ INT32 ClosestPC( SOLDIERTYPE *pSoldier, INT32 * psDistance )
// NOTE: skips EPCs! // NOTE: skips EPCs!
UINT16 ubLoop;
SOLDIERTYPE *pTargetSoldier; SOLDIERTYPE *pTargetSoldier;
INT32 sMinDist = WORLD_MAX; INT32 sMinDist = WORLD_MAX;
INT32 sDist; INT32 sDist;
INT32 sGridNo = NOWHERE; INT32 sGridNo = NOWHERE;
// Loop through all mercs on player team // Loop through all mercs on player team
ubLoop = gTacticalStatus.Team[ gbPlayerNum ].bFirstID; SoldierID ubLoop = gTacticalStatus.Team[ gbPlayerNum ].bFirstID;
for ( ; ubLoop <= gTacticalStatus.Team[ gbPlayerNum ].bLastID; ubLoop++) for ( ; ubLoop <= gTacticalStatus.Team[ gbPlayerNum ].bLastID; ++ubLoop)
{ {
pTargetSoldier = Menptr + ubLoop; pTargetSoldier = ubLoop;
if (!pTargetSoldier->bActive || !pTargetSoldier->bInSector) if (!pTargetSoldier->bActive || !pTargetSoldier->bInSector)
{ {
@@ -1762,17 +1761,16 @@ INT32 ClosestUnDisguisedPC( SOLDIERTYPE *pSoldier, INT32 * psDistance )
// used by NPCs... find the closest PC // used by NPCs... find the closest PC
// NOTE: skips EPCs! // NOTE: skips EPCs!
UINT16 ubLoop;
SOLDIERTYPE *pTargetSoldier; SOLDIERTYPE *pTargetSoldier;
INT32 sMinDist = WORLD_MAX; INT32 sMinDist = WORLD_MAX;
INT32 sDist; INT32 sDist;
INT32 sGridNo = NOWHERE; INT32 sGridNo = NOWHERE;
// Loop through all mercs on player team // Loop through all mercs on player team
ubLoop = gTacticalStatus.Team[ gbPlayerNum ].bFirstID; SoldierID ubLoop = gTacticalStatus.Team[ gbPlayerNum ].bFirstID;
for ( ; ubLoop <= gTacticalStatus.Team[ gbPlayerNum ].bLastID; ubLoop++) for ( ; ubLoop <= gTacticalStatus.Team[ gbPlayerNum ].bLastID; ++ubLoop )
{ {
pTargetSoldier = Menptr + ubLoop; pTargetSoldier = ubLoop;
if (!pTargetSoldier->bActive || !pTargetSoldier->bInSector) if (!pTargetSoldier->bActive || !pTargetSoldier->bInSector)
continue; continue;
@@ -2021,7 +2019,6 @@ INT16 EstimatePathCostToLocation( SOLDIERTYPE * pSoldier, INT32 sDestGridNo, INT
BOOLEAN GuySawEnemy( SOLDIERTYPE * pSoldier, UINT8 ubMax ) BOOLEAN GuySawEnemy( SOLDIERTYPE * pSoldier, UINT8 ubMax )
{ {
UINT8 ubTeamLoop; UINT8 ubTeamLoop;
UINT16 ubIDLoop;
SOLDIERTYPE *pOpponent; SOLDIERTYPE *pOpponent;
for ( ubTeamLoop = 0; ubTeamLoop < MAXTEAMS; ++ubTeamLoop ) for ( ubTeamLoop = 0; ubTeamLoop < MAXTEAMS; ++ubTeamLoop )
@@ -2032,9 +2029,9 @@ BOOLEAN GuySawEnemy( SOLDIERTYPE * pSoldier, UINT8 ubMax )
if ( gTacticalStatus.Team[ ubTeamLoop ].bSide != pSoldier->bSide ) if ( gTacticalStatus.Team[ ubTeamLoop ].bSide != pSoldier->bSide )
{ {
// consider guys in this team, which isn't on our side // consider guys in this team, which isn't on our side
for ( ubIDLoop = gTacticalStatus.Team[ ubTeamLoop ].bFirstID; ubIDLoop <= gTacticalStatus.Team[ ubTeamLoop ].bLastID; ++ubIDLoop ) for ( SoldierID ubIDLoop = gTacticalStatus.Team[ ubTeamLoop ].bFirstID; ubIDLoop <= gTacticalStatus.Team[ ubTeamLoop ].bLastID; ++ubIDLoop )
{ {
pOpponent = MercPtrs[ubIDLoop]; pOpponent = ubIDLoop;
// if this merc is inactive, at base, on assignment, or dead // if this merc is inactive, at base, on assignment, or dead
if (!pOpponent) if (!pOpponent)
@@ -2174,15 +2171,14 @@ INT32 ClosestReachableFriendInTrouble(SOLDIERTYPE *pSoldier, BOOLEAN * pfClimbin
INT16 DistanceToClosestFriend( SOLDIERTYPE * pSoldier ) INT16 DistanceToClosestFriend( SOLDIERTYPE * pSoldier )
{ {
// find the distance to the closest person on the same team // find the distance to the closest person on the same team
UINT16 ubLoop;
SOLDIERTYPE *pTargetSoldier; SOLDIERTYPE *pTargetSoldier;
INT16 sMinDist = 1000; INT16 sMinDist = 1000;
INT16 sDist; INT16 sDist;
// Loop through all mercs on player team // Loop through all mercs on player team
ubLoop = gTacticalStatus.Team[ pSoldier->bTeam ].bFirstID; SoldierID ubLoop = gTacticalStatus.Team[ pSoldier->bTeam ].bFirstID;
for ( ; ubLoop <= gTacticalStatus.Team[ pSoldier->bTeam ].bLastID; ubLoop++ ) for ( ; ubLoop <= gTacticalStatus.Team[ pSoldier->bTeam ].bLastID; ++ubLoop )
{ {
if (ubLoop == pSoldier->ubID) if (ubLoop == pSoldier->ubID)
{ {
@@ -2190,7 +2186,7 @@ INT16 DistanceToClosestFriend( SOLDIERTYPE * pSoldier )
continue; continue;
} }
pTargetSoldier = Menptr + ubLoop; pTargetSoldier = ubLoop;
if ( pSoldier->bActive && pSoldier->bInSector ) if ( pSoldier->bActive && pSoldier->bInSector )
{ {
@@ -3167,12 +3163,11 @@ INT32 RangeChangeDesire( SOLDIERTYPE * pSoldier )
BOOLEAN ArmySeesOpponents( void ) BOOLEAN ArmySeesOpponents( void )
{ {
INT32 cnt;
SOLDIERTYPE * pSoldier; SOLDIERTYPE * pSoldier;
for ( cnt = gTacticalStatus.Team[ ENEMY_TEAM ].bFirstID; cnt <= gTacticalStatus.Team[ ENEMY_TEAM ].bLastID; cnt++ ) for ( SoldierID cnt = gTacticalStatus.Team[ ENEMY_TEAM ].bFirstID; cnt <= gTacticalStatus.Team[ ENEMY_TEAM ].bLastID; ++cnt )
{ {
pSoldier = MercPtrs[ cnt ]; pSoldier = cnt;
if ( pSoldier->bActive && pSoldier->bInSector && pSoldier->stats.bLife >= OKLIFE && pSoldier->aiData.bOppCnt > 0 ) if ( pSoldier->bActive && pSoldier->bInSector && pSoldier->stats.bLife >= OKLIFE && pSoldier->aiData.bOppCnt > 0 )
{ {
@@ -3306,7 +3301,7 @@ INT16 AssessTacticalSituation( INT8 bTeam )
BOOLEAN TeamSeesOpponent( INT8 bTeam, SOLDIERTYPE * pOpponent ) BOOLEAN TeamSeesOpponent( INT8 bTeam, SOLDIERTYPE * pOpponent )
{ {
SOLDIERTYPE * pSoldier; SOLDIERTYPE * pSoldier;
UINT16 cnt; SoldierID cnt;
// This assertion can be safely removed, assuming the program does what it should. It simply checks // This assertion can be safely removed, assuming the program does what it should. It simply checks
// whether the "opponent" is on the same team being checked. That should be avoided when calling this // whether the "opponent" is on the same team being checked. That should be avoided when calling this
@@ -3316,9 +3311,9 @@ BOOLEAN TeamSeesOpponent( INT8 bTeam, SOLDIERTYPE * pOpponent )
// We're checking Merc/Militia visibility // We're checking Merc/Militia visibility
if (bTeam == OUR_TEAM || bTeam == MILITIA_TEAM ) if (bTeam == OUR_TEAM || bTeam == MILITIA_TEAM )
{ {
for ( cnt = gTacticalStatus.Team[ MILITIA_TEAM ].bFirstID; cnt <= gTacticalStatus.Team[ MILITIA_TEAM ].bLastID; cnt++ ) for ( cnt = gTacticalStatus.Team[ MILITIA_TEAM ].bFirstID; cnt <= gTacticalStatus.Team[ MILITIA_TEAM ].bLastID; ++cnt )
{ {
pSoldier = MercPtrs[ cnt ]; pSoldier = cnt;
if (pSoldier->bActive && pSoldier->bInSector && pSoldier->stats.bLife >= OKLIFE) if (pSoldier->bActive && pSoldier->bInSector && pSoldier->stats.bLife >= OKLIFE)
{ {
@@ -3328,9 +3323,9 @@ BOOLEAN TeamSeesOpponent( INT8 bTeam, SOLDIERTYPE * pOpponent )
return ( TRUE ); return ( TRUE );
} }
} }
for ( cnt = gTacticalStatus.Team[ OUR_TEAM ].bFirstID; cnt <= gTacticalStatus.Team[ OUR_TEAM ].bLastID; cnt++ ) for ( cnt = gTacticalStatus.Team[ OUR_TEAM ].bFirstID; cnt <= gTacticalStatus.Team[ OUR_TEAM ].bLastID; ++cnt )
{ {
pSoldier = MercPtrs[ cnt ]; pSoldier = cnt;
if (pSoldier->bActive && pSoldier->bInSector && pSoldier->stats.bLife >= OKLIFE) if (pSoldier->bActive && pSoldier->bInSector && pSoldier->stats.bLife >= OKLIFE)
{ {
@@ -3349,9 +3344,9 @@ BOOLEAN TeamSeesOpponent( INT8 bTeam, SOLDIERTYPE * pOpponent )
// Check enemy visibility // Check enemy visibility
else if (bTeam == ENEMY_TEAM) else if (bTeam == ENEMY_TEAM)
{ {
for ( cnt = gTacticalStatus.Team[ ENEMY_TEAM ].bFirstID; cnt <= gTacticalStatus.Team[ ENEMY_TEAM ].bLastID; cnt++ ) for ( cnt = gTacticalStatus.Team[ ENEMY_TEAM ].bFirstID; cnt <= gTacticalStatus.Team[ ENEMY_TEAM ].bLastID; ++cnt )
{ {
pSoldier = MercPtrs[ cnt ]; pSoldier = cnt;
if (pSoldier->bActive && pSoldier->bInSector && pSoldier->stats.bLife >= OKLIFE) if (pSoldier->bActive && pSoldier->bInSector && pSoldier->stats.bLife >= OKLIFE)
{ {
@@ -3448,14 +3443,13 @@ INT32 CalcStraightThreatValue( SOLDIERTYPE *pEnemy )
SoldierID GetClosestFlaggedSoldierID( SOLDIERTYPE * pSoldier, INT16 aRange, UINT8 auTeam, UINT32 aFlag, BOOLEAN fCheckSight ) SoldierID GetClosestFlaggedSoldierID( SOLDIERTYPE * pSoldier, INT16 aRange, UINT8 auTeam, UINT32 aFlag, BOOLEAN fCheckSight )
{ {
SoldierID id = NOBODY; SoldierID id = NOBODY;
UINT32 uiLoop;
SOLDIERTYPE * pFriend; SOLDIERTYPE * pFriend;
INT16 range = aRange; INT16 range = aRange;
// go through each soldier, looking for "friends" (soldiers on same team) // go through each soldier, looking for "friends" (soldiers on same team)
for (uiLoop = gTacticalStatus.Team[ auTeam ].bFirstID; uiLoop <= gTacticalStatus.Team[ auTeam ].bLastID; ++uiLoop) for ( SoldierID uiLoop = gTacticalStatus.Team[ auTeam ].bFirstID; uiLoop <= gTacticalStatus.Team[ auTeam ].bLastID; ++uiLoop)
{ {
pFriend = MercPtrs[ uiLoop ]; pFriend = uiLoop;
// if this merc is inactive, not in sector, or dead // if this merc is inactive, not in sector, or dead
if (!pFriend) if (!pFriend)
@@ -3501,14 +3495,13 @@ SoldierID GetClosestFlaggedSoldierID( SOLDIERTYPE * pSoldier, INT16 aRange, UINT
SoldierID GetClosestWoundedSoldierID( SOLDIERTYPE * pSoldier, INT16 aRange, UINT8 auTeam ) SoldierID GetClosestWoundedSoldierID( SOLDIERTYPE * pSoldier, INT16 aRange, UINT8 auTeam )
{ {
SoldierID id = NOBODY; SoldierID id = NOBODY;
UINT32 uiLoop;
SOLDIERTYPE * pFriend; SOLDIERTYPE * pFriend;
INT16 range = aRange; INT16 range = aRange;
// go through each soldier, looking for "friends" (soldiers on same team) // go through each soldier, looking for "friends" (soldiers on same team)
for (uiLoop = gTacticalStatus.Team[ auTeam ].bFirstID; uiLoop <= gTacticalStatus.Team[ auTeam ].bLastID; ++uiLoop) for ( SoldierID uiLoop = gTacticalStatus.Team[ auTeam ].bFirstID; uiLoop <= gTacticalStatus.Team[ auTeam ].bLastID; ++uiLoop)
{ {
pFriend = MercPtrs[ uiLoop ]; pFriend = uiLoop;
// if this merc is inactive, not in sector, or dead // if this merc is inactive, not in sector, or dead
if (!pFriend) if (!pFriend)
@@ -3550,14 +3543,13 @@ SoldierID GetClosestWoundedSoldierID( SOLDIERTYPE * pSoldier, INT16 aRange, UINT
SoldierID GetClosestMedicSoldierID( SOLDIERTYPE * pSoldier, INT16 aRange, UINT8 auTeam ) SoldierID GetClosestMedicSoldierID( SOLDIERTYPE * pSoldier, INT16 aRange, UINT8 auTeam )
{ {
SoldierID id = NOBODY; SoldierID id = NOBODY;
UINT32 uiLoop;
SOLDIERTYPE * pFriend; SOLDIERTYPE * pFriend;
INT16 range = aRange; INT16 range = aRange;
// go through each soldier, looking for "friends" (soldiers on same team) // go through each soldier, looking for "friends" (soldiers on same team)
for (uiLoop = gTacticalStatus.Team[ auTeam ].bFirstID; uiLoop <= gTacticalStatus.Team[ auTeam ].bLastID; ++uiLoop) for ( SoldierID uiLoop = gTacticalStatus.Team[ auTeam ].bFirstID; uiLoop <= gTacticalStatus.Team[ auTeam ].bLastID; ++uiLoop)
{ {
pFriend = MercPtrs[ uiLoop ]; pFriend = uiLoop;
// if this merc is inactive, not in sector, or dead // if this merc is inactive, not in sector, or dead
if (!pFriend) if (!pFriend)
@@ -3622,9 +3614,9 @@ UINT16 CountFriendsInDirection( SOLDIERTYPE *pSoldier, INT32 sTargetGridNo )
ubMyDir = GetDirectionFromCenterCellXYGridNo(sTargetGridNo, pSoldier->sGridNo); ubMyDir = GetDirectionFromCenterCellXYGridNo(sTargetGridNo, pSoldier->sGridNo);
// Run through each friendly. // Run through each friendly.
for ( UINT16 iCounter = gTacticalStatus.Team[ pSoldier->bTeam ].bFirstID ; iCounter <= gTacticalStatus.Team[ pSoldier->bTeam ].bLastID ; iCounter ++ ) for ( SoldierID iCounter = gTacticalStatus.Team[ pSoldier->bTeam ].bFirstID ; iCounter <= gTacticalStatus.Team[ pSoldier->bTeam ].bLastID ; ++iCounter )
{ {
pFriend = MercPtrs[ iCounter ]; pFriend = iCounter;
ubFriendDir = GetDirectionFromCenterCellXYGridNo(sTargetGridNo, pFriend->sGridNo); ubFriendDir = GetDirectionFromCenterCellXYGridNo(sTargetGridNo, pFriend->sGridNo);
if (pFriend != pSoldier && if (pFriend != pSoldier &&
@@ -3654,9 +3646,9 @@ UINT16 CountNearbyFriends( SOLDIERTYPE *pSoldier, INT32 sGridNo, UINT8 ubDistanc
return 0; return 0;
// Run through each friendly. // Run through each friendly.
for ( UINT16 iCounter = gTacticalStatus.Team[ pSoldier->bTeam ].bFirstID ; iCounter <= gTacticalStatus.Team[ pSoldier->bTeam ].bLastID ; iCounter ++ ) for ( SoldierID iCounter = gTacticalStatus.Team[ pSoldier->bTeam ].bFirstID ; iCounter <= gTacticalStatus.Team[ pSoldier->bTeam ].bLastID ; ++iCounter )
{ {
pFriend = MercPtrs[ iCounter ]; pFriend = iCounter;
// Make sure that character is alive, not too shocked, and conscious, and of higher experience level // Make sure that character is alive, not too shocked, and conscious, and of higher experience level
// than the character being suppressed. // than the character being suppressed.
if (pFriend != pSoldier && pFriend->bActive && pFriend->stats.bLife >= OKLIFE && if (pFriend != pSoldier && pFriend->bActive && pFriend->stats.bLife >= OKLIFE &&
@@ -3963,9 +3955,9 @@ BOOLEAN WeAttack(INT8 bTeam)
SOLDIERTYPE * pFriend; SOLDIERTYPE * pFriend;
// Run through each friendly. // Run through each friendly.
for (UINT16 iCounter = gTacticalStatus.Team[bTeam].bFirstID; iCounter <= gTacticalStatus.Team[bTeam].bLastID; iCounter++) for ( SoldierID iCounter = gTacticalStatus.Team[bTeam].bFirstID; iCounter <= gTacticalStatus.Team[bTeam].bLastID; ++iCounter )
{ {
pFriend = MercPtrs[iCounter]; pFriend = iCounter;
if (pFriend && if (pFriend &&
pFriend->bActive && pFriend->bActive &&
@@ -3987,9 +3979,9 @@ UINT8 CountNearbyFriendsLastAttackHit( SOLDIERTYPE *pSoldier, INT32 sGridNo, UIN
UINT8 ubFriendCount = 0; UINT8 ubFriendCount = 0;
// Run through each friendly. // Run through each friendly.
for ( UINT16 iCounter = gTacticalStatus.Team[ pSoldier->bTeam ].bFirstID ; iCounter <= gTacticalStatus.Team[ pSoldier->bTeam ].bLastID ; iCounter ++ ) for ( SoldierID iCounter = gTacticalStatus.Team[ pSoldier->bTeam ].bFirstID ; iCounter <= gTacticalStatus.Team[ pSoldier->bTeam ].bLastID ; ++iCounter )
{ {
pFriend = MercPtrs[ iCounter ]; pFriend = iCounter;
if (pFriend != pSoldier && if (pFriend != pSoldier &&
pFriend->bActive && pFriend->bActive &&
@@ -4027,9 +4019,9 @@ UINT8 CountFriendsFlankSameSpot(SOLDIERTYPE *pSoldier, INT32 sSpot)
} }
// Run through each friendly. // Run through each friendly.
for (UINT16 iCounter = gTacticalStatus.Team[pSoldier->bTeam].bFirstID; iCounter <= gTacticalStatus.Team[pSoldier->bTeam].bLastID; iCounter++) for ( SoldierID iCounter = gTacticalStatus.Team[pSoldier->bTeam].bFirstID; iCounter <= gTacticalStatus.Team[pSoldier->bTeam].bLastID; ++iCounter )
{ {
pFriend = MercPtrs[iCounter]; pFriend = iCounter;
if (pFriend && if (pFriend &&
pFriend != pSoldier && pFriend != pSoldier &&
@@ -4109,9 +4101,9 @@ UINT8 CountFriendsBlack( SOLDIERTYPE *pSoldier, INT32 sClosestOpponent )
} }
// Run through each friendly. // Run through each friendly.
for ( UINT16 iCounter = gTacticalStatus.Team[ pSoldier->bTeam ].bFirstID ; iCounter <= gTacticalStatus.Team[ pSoldier->bTeam ].bLastID ; iCounter ++ ) for ( SoldierID iCounter = gTacticalStatus.Team[ pSoldier->bTeam ].bFirstID ; iCounter <= gTacticalStatus.Team[ pSoldier->bTeam ].bLastID ; ++iCounter )
{ {
pFriend = MercPtrs[ iCounter ]; pFriend = iCounter;
// Make sure that character is alive, not too shocked, and conscious // Make sure that character is alive, not too shocked, and conscious
if (pFriend != pSoldier && if (pFriend != pSoldier &&
@@ -4148,9 +4140,9 @@ UINT16 CountTeamUnderAttack(INT8 bTeam, INT32 sGridNo, INT16 sDistance)
return 0; return 0;
// Run through each friendly. // Run through each friendly.
for (UINT16 iCounter = gTacticalStatus.Team[bTeam].bFirstID; iCounter <= gTacticalStatus.Team[bTeam].bLastID; iCounter++) for ( SoldierID iCounter = gTacticalStatus.Team[bTeam].bFirstID; iCounter <= gTacticalStatus.Team[bTeam].bLastID; ++iCounter )
{ {
pFriend = MercPtrs[iCounter]; pFriend = iCounter;
if (pFriend && if (pFriend &&
pFriend->bActive && pFriend->bActive &&
@@ -4400,9 +4392,9 @@ UINT16 CountTeamSeeSoldier( INT8 bTeam, SOLDIERTYPE *pSoldier )
if ( bTeam >= MAXTEAMS ) if ( bTeam >= MAXTEAMS )
return 0; return 0;
for ( UINT16 cnt = gTacticalStatus.Team[bTeam].bFirstID; cnt <= gTacticalStatus.Team[bTeam].bLastID; ++cnt ) for ( SoldierID cnt = gTacticalStatus.Team[bTeam].bFirstID; cnt <= gTacticalStatus.Team[bTeam].bLastID; ++cnt )
{ {
pFriend = MercPtrs[cnt]; pFriend = cnt;
if ( pFriend->bActive && if ( pFriend->bActive &&
pFriend->bInSector && pFriend->bInSector &&
@@ -4844,7 +4836,6 @@ UINT16 CountSeenEnemiesLastTurn( SOLDIERTYPE* pSoldier )
CHECKF(pSoldier); CHECKF(pSoldier);
UINT8 ubTeamLoop; UINT8 ubTeamLoop;
UINT16 ubIDLoop;
UINT16 cnt = 0; UINT16 cnt = 0;
for( ubTeamLoop = 0; ubTeamLoop < MAXTEAMS; ubTeamLoop++ ) for( ubTeamLoop = 0; ubTeamLoop < MAXTEAMS; ubTeamLoop++ )
@@ -4855,7 +4846,7 @@ UINT16 CountSeenEnemiesLastTurn( SOLDIERTYPE* pSoldier )
if( gTacticalStatus.Team[ ubTeamLoop ].bSide != pSoldier->bSide ) if( gTacticalStatus.Team[ ubTeamLoop ].bSide != pSoldier->bSide )
{ {
// consider guys in this team, which isn't on our side // consider guys in this team, which isn't on our side
for( ubIDLoop = gTacticalStatus.Team[ ubTeamLoop ].bFirstID; ubIDLoop <= gTacticalStatus.Team[ ubTeamLoop ].bLastID; ubIDLoop++ ) for( SoldierID ubIDLoop = gTacticalStatus.Team[ ubTeamLoop ].bFirstID; ubIDLoop <= gTacticalStatus.Team[ ubTeamLoop ].bLastID; ++ubIDLoop )
{ {
// if this guy SAW an enemy recently... // if this guy SAW an enemy recently...
if( pSoldier->aiData.bOppList[ ubIDLoop ] >= SEEN_CURRENTLY && if( pSoldier->aiData.bOppList[ ubIDLoop ] >= SEEN_CURRENTLY &&
+2 -2
View File
@@ -3903,9 +3903,9 @@ void CheckTossFriendSmoke(SOLDIERTYPE *pSoldier, ATTACKTYPE *pBestThrow)
UINT8 ubDirection; UINT8 ubDirection;
// Run through each friendly. // Run through each friendly.
for (UINT16 iCounter = gTacticalStatus.Team[pSoldier->bTeam].bFirstID; iCounter <= gTacticalStatus.Team[pSoldier->bTeam].bLastID; iCounter++) for ( SoldierID iCounter = gTacticalStatus.Team[pSoldier->bTeam].bFirstID; iCounter <= gTacticalStatus.Team[pSoldier->bTeam].bLastID; ++iCounter)
{ {
pFriend = MercPtrs[iCounter]; pFriend = iCounter;
// check that friend is alive and needs cover // check that friend is alive and needs cover
if (pFriend && if (pFriend &&
+7 -7
View File
@@ -66,11 +66,11 @@ INT8 gbHuntCallPriority[NUM_CREATURE_CALLS] =
void CreatureCall( SOLDIERTYPE * pCaller ) void CreatureCall( SOLDIERTYPE * pCaller )
{ {
UINT8 ubCallerType=0; UINT8 ubCallerType=0;
UINT16 ubReceiver; SoldierID ubReceiver;
INT8 bFullPriority; INT8 bFullPriority;
INT8 bPriority; INT8 bPriority;
SOLDIERTYPE * pReceiver; SOLDIERTYPE *pReceiver;
UINT16 usDistToCaller; UINT16 usDistToCaller;
// communicate call to all creatures on map through ultrasonics // communicate call to all creatures on map through ultrasonics
gTacticalStatus.Team[pCaller->bTeam].bAwareOfOpposition = TRUE; gTacticalStatus.Team[pCaller->bTeam].bAwareOfOpposition = TRUE;
@@ -121,9 +121,9 @@ void CreatureCall( SOLDIERTYPE * pCaller )
} }
for (ubReceiver = gTacticalStatus.Team[ pCaller->bTeam ].bFirstID; ubReceiver <= gTacticalStatus.Team[ pCaller->bTeam ].bLastID; ubReceiver++) for (ubReceiver = gTacticalStatus.Team[ pCaller->bTeam ].bFirstID; ubReceiver <= gTacticalStatus.Team[ pCaller->bTeam ].bLastID; ++ubReceiver )
{ {
pReceiver = MercPtrs[ubReceiver]; pReceiver = ubReceiver;
if (pReceiver->bActive && pReceiver->bInSector && (pReceiver->stats.bLife >= OKLIFE) && (pReceiver != pCaller) && (pReceiver->aiData.bAlertStatus < STATUS_BLACK)) if (pReceiver->bActive && pReceiver->bInSector && (pReceiver->stats.bLife >= OKLIFE) && (pReceiver != pCaller) && (pReceiver->aiData.bAlertStatus < STATUS_BLACK))
{ {
if (pReceiver->ubBodyType != LARVAE_MONSTER && pReceiver->ubBodyType != INFANT_MONSTER && pReceiver->ubBodyType != QUEENMONSTER) if (pReceiver->ubBodyType != LARVAE_MONSTER && pReceiver->ubBodyType != INFANT_MONSTER && pReceiver->ubBodyType != QUEENMONSTER)
+2 -2
View File
@@ -754,9 +754,9 @@ INT8 DecideActionGreen(SOLDIERTYPE *pSoldier)
{ {
// WANNE: This should fix the bug if any merc are still under PC control. This could happen after boxing in SAN MONA. // WANNE: This should fix the bug if any merc are still under PC control. This could happen after boxing in SAN MONA.
SOLDIERTYPE *pTeamSoldier; SOLDIERTYPE *pTeamSoldier;
for (UINT16 bLoop=gTacticalStatus.Team[gbPlayerNum].bFirstID; bLoop <= gTacticalStatus.Team[gbPlayerNum].bLastID; bLoop++) for ( SoldierID bLoop=gTacticalStatus.Team[gbPlayerNum].bFirstID; bLoop <= gTacticalStatus.Team[gbPlayerNum].bLastID; ++bLoop )
{ {
pTeamSoldier=MercPtrs[bLoop]; pTeamSoldier = bLoop;
if (pTeamSoldier->flags.uiStatusFlags & SOLDIER_PCUNDERAICONTROL) if (pTeamSoldier->flags.uiStatusFlags & SOLDIER_PCUNDERAICONTROL)
pTeamSoldier->flags.uiStatusFlags &= (~SOLDIER_PCUNDERAICONTROL); pTeamSoldier->flags.uiStatusFlags &= (~SOLDIER_PCUNDERAICONTROL);
+6 -6
View File
@@ -21,7 +21,6 @@ void CallAvailableEnemiesTo( INT32 sGridNo )
void CallAvailableTeamEnemiesTo( INT32 sGridNo, INT8 bTeam ) void CallAvailableTeamEnemiesTo( INT32 sGridNo, INT8 bTeam )
{ {
INT32 iLoop2;
SOLDIERTYPE * pSoldier; SOLDIERTYPE * pSoldier;
// All enemy teams become aware of a very important "noise" coming from here! // All enemy teams become aware of a very important "noise" coming from here!
@@ -36,9 +35,10 @@ void CallAvailableTeamEnemiesTo( INT32 sGridNo, INT8 bTeam )
gubPublicNoiseVolume[bTeam] = MAX_MISC_NOISE_DURATION; gubPublicNoiseVolume[bTeam] = MAX_MISC_NOISE_DURATION;
// new situation for everyone; // new situation for everyone;
iLoop2 = gTacticalStatus.Team[ bTeam ].bFirstID; SoldierID iLoop2 = gTacticalStatus.Team[ bTeam ].bFirstID;
for ( pSoldier = MercPtrs[iLoop2]; iLoop2 <= gTacticalStatus.Team[ bTeam ].bLastID; iLoop2++, pSoldier++ ) for ( ; iLoop2 <= gTacticalStatus.Team[ bTeam ].bLastID; ++iLoop2 )
{ {
pSoldier = iLoop2;
if (pSoldier->bActive && pSoldier->bInSector && pSoldier->stats.bLife >= OKLIFE) if (pSoldier->bActive && pSoldier->bInSector && pSoldier->stats.bLife >= OKLIFE)
{ {
SetNewSituation( pSoldier ); SetNewSituation( pSoldier );
@@ -54,7 +54,6 @@ void CallAvailableKingpinMenTo( INT32 sGridNo )
// like call all enemies, but only affects civgroup KINGPIN guys with // like call all enemies, but only affects civgroup KINGPIN guys with
// NO PROFILE // NO PROFILE
INT32 iLoop2;
SOLDIERTYPE * pSoldier; SOLDIERTYPE * pSoldier;
// All enemy teams become aware of a very important "noise" coming from here! // All enemy teams become aware of a very important "noise" coming from here!
@@ -67,9 +66,10 @@ void CallAvailableKingpinMenTo( INT32 sGridNo )
// new situation for everyone... // new situation for everyone...
iLoop2 = gTacticalStatus.Team[ CIV_TEAM ].bFirstID; SoldierID iLoop2 = gTacticalStatus.Team[ CIV_TEAM ].bFirstID;
for ( pSoldier = MercPtrs[iLoop2]; iLoop2 <= gTacticalStatus.Team[ CIV_TEAM ].bLastID; iLoop2++, pSoldier++ ) for ( ; iLoop2 <= gTacticalStatus.Team[ CIV_TEAM ].bLastID; ++iLoop2 )
{ {
pSoldier = iLoop2;
if (pSoldier->bActive && pSoldier->bInSector && pSoldier->stats.bLife >= OKLIFE && pSoldier->ubCivilianGroup == KINGPIN_CIV_GROUP && pSoldier->ubProfile == NO_PROFILE) if (pSoldier->bActive && pSoldier->bInSector && pSoldier->stats.bLife >= OKLIFE && pSoldier->ubCivilianGroup == KINGPIN_CIV_GROUP && pSoldier->ubProfile == NO_PROFILE)
{ {
SetNewSituation( pSoldier ); SetNewSituation( pSoldier );
+14 -14
View File
@@ -72,7 +72,6 @@ BOOLEAN FindAutobandageClimbPoint( INT32 sDesiredGridNo, BOOLEAN fClimbUp )
BOOLEAN FullPatientCheck( SOLDIERTYPE * pPatient ) BOOLEAN FullPatientCheck( SOLDIERTYPE * pPatient )
{ {
UINT16 cnt;
SOLDIERTYPE * pSoldier; SOLDIERTYPE * pSoldier;
if ( CanCharacterAutoBandageTeammate( pPatient ) ) if ( CanCharacterAutoBandageTeammate( pPatient ) )
@@ -90,9 +89,10 @@ BOOLEAN FullPatientCheck( SOLDIERTYPE * pPatient )
else else
{ {
// run though the list of chars on team // run though the list of chars on team
cnt = gTacticalStatus.Team[ gbPlayerNum ].bFirstID; SoldierID cnt = gTacticalStatus.Team[ gbPlayerNum ].bFirstID;
for ( pSoldier = MercPtrs[ cnt ]; cnt <= gTacticalStatus.Team[ gbPlayerNum ].bLastID; cnt++,pSoldier++) for ( ; cnt <= gTacticalStatus.Team[ gbPlayerNum ].bLastID; ++cnt )
{ {
pSoldier = cnt;
// can this character help out? // can this character help out?
if ( CanCharacterAutoBandageTeammate( pSoldier ) == TRUE ) if ( CanCharacterAutoBandageTeammate( pSoldier ) == TRUE )
{ {
@@ -119,17 +119,16 @@ BOOLEAN FullPatientCheck( SOLDIERTYPE * pPatient )
BOOLEAN CanAutoBandage( BOOLEAN fDoFullCheck ) BOOLEAN CanAutoBandage( BOOLEAN fDoFullCheck )
{ {
// returns false if we should stop being in auto-bandage mode // returns false if we should stop being in auto-bandage mode
UINT16 cnt;
UINT16 ubMedics = 0, ubPatients = 0; UINT16 ubMedics = 0, ubPatients = 0;
SOLDIERTYPE * pSoldier; SOLDIERTYPE * pSoldier;
static SoldierID ubIDForFullCheck = NOBODY; static SoldierID ubIDForFullCheck = NOBODY;
// run though the list of chars on team // run though the list of chars on team
cnt = gTacticalStatus.Team[ gbPlayerNum ].bFirstID; SoldierID cnt = gTacticalStatus.Team[ gbPlayerNum ].bFirstID;
for ( pSoldier = MercPtrs[ cnt ]; cnt <= gTacticalStatus.Team[ gbPlayerNum ].bLastID; cnt++,pSoldier++) for ( ; cnt <= gTacticalStatus.Team[ gbPlayerNum ].bLastID; ++cnt)
{ {
// can this character help out? // can this character help out?
if( CanCharacterAutoBandageTeammate( pSoldier ) == TRUE ) if( CanCharacterAutoBandageTeammate( cnt ) == TRUE )
{ {
// yep, up the number of medics in sector // yep, up the number of medics in sector
ubMedics++; ubMedics++;
@@ -143,8 +142,9 @@ BOOLEAN CanAutoBandage( BOOLEAN fDoFullCheck )
} }
cnt = gTacticalStatus.Team[ gbPlayerNum ].bFirstID; cnt = gTacticalStatus.Team[ gbPlayerNum ].bFirstID;
for ( pSoldier = MercPtrs[ cnt ]; cnt <= gTacticalStatus.Team[ gbPlayerNum ].bLastID; cnt++,pSoldier++) for ( ; cnt <= gTacticalStatus.Team[ gbPlayerNum ].bLastID; ++cnt )
{ {
pSoldier = cnt;
// can this character be helped out by a teammate? // can this character be helped out by a teammate?
if ( CanCharacterBeAutoBandagedByTeammate( pSoldier ) == TRUE ) if ( CanCharacterBeAutoBandagedByTeammate( pSoldier ) == TRUE )
{ {
@@ -227,7 +227,6 @@ BOOLEAN CanCharacterBeAutoBandagedByTeammate( SOLDIERTYPE *pSoldier )
INT8 FindBestPatient( SOLDIERTYPE * pSoldier, BOOLEAN * pfDoClimb ) INT8 FindBestPatient( SOLDIERTYPE * pSoldier, BOOLEAN * pfDoClimb )
{ {
UINT16 cnt;
UINT8 cnt2; UINT8 cnt2;
INT32 bBestPriority = 0, sBestAdjGridNo = NOWHERE; INT32 bBestPriority = 0, sBestAdjGridNo = NOWHERE;
INT32 sPatientGridNo = NOWHERE, sBestPatientGridNo = NOWHERE; INT32 sPatientGridNo = NOWHERE, sBestPatientGridNo = NOWHERE;
@@ -244,9 +243,10 @@ INT8 FindBestPatient( SOLDIERTYPE * pSoldier, BOOLEAN * pfDoClimb )
gubGlobalPathFlags = PATH_THROUGH_PEOPLE; gubGlobalPathFlags = PATH_THROUGH_PEOPLE;
// search for someone who needs aid // search for someone who needs aid
cnt = gTacticalStatus.Team[ OUR_TEAM ].bFirstID; SoldierID cnt = gTacticalStatus.Team[ OUR_TEAM ].bFirstID;
for ( pPatient = MercPtrs[ cnt ]; cnt <= gTacticalStatus.Team[ OUR_TEAM ].bLastID; cnt++,pPatient++) for ( ; cnt <= gTacticalStatus.Team[ OUR_TEAM ].bLastID; ++cnt )
{ {
pPatient = cnt;
if ( !(pPatient->bActive) || !(pPatient->bInSector) ) if ( !(pPatient->bActive) || !(pPatient->bInSector) )
{ {
continue; // NEXT!!! continue; // NEXT!!!
@@ -475,13 +475,13 @@ INT8 DecideAutoBandage( SOLDIERTYPE * pSoldier )
BOOLEAN DoctorIsPresent( SOLDIERTYPE * pPatient, BOOLEAN fOnDoctorAssignmentCheck ) BOOLEAN DoctorIsPresent( SOLDIERTYPE * pPatient, BOOLEAN fOnDoctorAssignmentCheck )
{ {
SOLDIERTYPE * pMedic = NULL; SOLDIERTYPE * pMedic = NULL;
UINT16 cnt;
INT8 bSlot; INT8 bSlot;
BOOLEAN fDoctorHasBeenFound = FALSE; BOOLEAN fDoctorHasBeenFound = FALSE;
cnt = gTacticalStatus.Team[ OUR_TEAM ].bFirstID; SoldierID cnt = gTacticalStatus.Team[ OUR_TEAM ].bFirstID;
for ( pMedic = MercPtrs[ cnt ]; cnt <= gTacticalStatus.Team[ OUR_TEAM ].bLastID; cnt++,pMedic++) for ( ; cnt <= gTacticalStatus.Team[ OUR_TEAM ].bLastID; ++cnt )
{ {
pMedic = cnt;
if ( !(pMedic->bActive) || !(pMedic->bInSector) || ( pMedic->flags.uiStatusFlags & SOLDIER_VEHICLE ) || (pMedic->bAssignment == VEHICLE ) ) if ( !(pMedic->bActive) || !(pMedic->bInSector) || ( pMedic->flags.uiStatusFlags & SOLDIER_VEHICLE ) || (pMedic->bAssignment == VEHICLE ) )
{ {
// is nowhere around! // is nowhere around!
+6 -6
View File
@@ -2913,7 +2913,6 @@ void TriggerClosestMercWhoCanSeeNPC( UINT8 ubNPC, NPCQuoteInfo *pQuotePtr )
UINT16 ubNumMercs = 0; UINT16 ubNumMercs = 0;
UINT16 ubChosenMerc; UINT16 ubChosenMerc;
SOLDIERTYPE *pTeamSoldier, *pSoldier; SOLDIERTYPE *pTeamSoldier, *pSoldier;
INT32 cnt;
// First get pointer to NPC // First get pointer to NPC
pSoldier = FindSoldierByProfileID( ubNPC, FALSE ); pSoldier = FindSoldierByProfileID( ubNPC, FALSE );
@@ -2921,11 +2920,12 @@ void TriggerClosestMercWhoCanSeeNPC( UINT8 ubNPC, NPCQuoteInfo *pQuotePtr )
// Loop through all our guys and randomly say one from someone in our sector // Loop through all our guys and randomly say one from someone in our sector
// set up soldier ptr as first element in mercptrs list // set up soldier ptr as first element in mercptrs list
cnt = gTacticalStatus.Team[ gbPlayerNum ].bFirstID; SoldierID cnt = gTacticalStatus.Team[ gbPlayerNum ].bFirstID;
// run through list // run through list
for ( pTeamSoldier = MercPtrs[ cnt ]; cnt <= gTacticalStatus.Team[ gbPlayerNum ].bLastID; cnt++,pTeamSoldier++ ) for ( ; cnt <= gTacticalStatus.Team[ gbPlayerNum ].bLastID; ++cnt )
{ {
pTeamSoldier = cnt;
// Add guy if he's a candidate... // Add guy if he's a candidate...
if ( OK_INSECTOR_MERC( pTeamSoldier ) && pTeamSoldier->aiData.bOppList[ pSoldier->ubID ] == SEEN_CURRENTLY ) if ( OK_INSECTOR_MERC( pTeamSoldier ) && pTeamSoldier->aiData.bOppList[ pSoldier->ubID ] == SEEN_CURRENTLY )
{ {
@@ -3649,7 +3649,6 @@ void TriggerFriendWithHostileQuote( UINT8 ubNPC )
UINT16 ubNumMercsAvailable = 0, ubChosenMerc; UINT16 ubNumMercsAvailable = 0, ubChosenMerc;
SOLDIERTYPE * pTeamSoldier; SOLDIERTYPE * pTeamSoldier;
SOLDIERTYPE * pSoldier; SOLDIERTYPE * pSoldier;
INT32 cnt;
INT8 bTeam; INT8 bTeam;
// First get pointer to NPC // First get pointer to NPC
@@ -3663,11 +3662,12 @@ void TriggerFriendWithHostileQuote( UINT8 ubNPC )
// Loop through all our guys and find one to yell // Loop through all our guys and find one to yell
// set up soldier ptr as first element in mercptrs list // set up soldier ptr as first element in mercptrs list
cnt = gTacticalStatus.Team[ bTeam ].bFirstID; SoldierID cnt = gTacticalStatus.Team[ bTeam ].bFirstID;
// run through list // run through list
for ( pTeamSoldier = MercPtrs[ cnt ]; cnt <= gTacticalStatus.Team[ bTeam ].bLastID; cnt++,pTeamSoldier++ ) for ( ; cnt <= gTacticalStatus.Team[ bTeam ].bLastID; ++cnt )
{ {
pTeamSoldier = cnt;
// Add guy if he's a candidate... // Add guy if he's a candidate...
if ( pTeamSoldier->bActive && pSoldier->bInSector && pTeamSoldier->stats.bLife >= OKLIFE && pTeamSoldier->bBreath >= OKBREATH && pTeamSoldier->aiData.bOppCnt > 0 && pTeamSoldier->ubProfile != NO_PROFILE ) if ( pTeamSoldier->bActive && pSoldier->bInSector && pTeamSoldier->stats.bLife >= OKLIFE && pTeamSoldier->bBreath >= OKBREATH && pTeamSoldier->aiData.bOppCnt > 0 && pTeamSoldier->ubProfile != NO_PROFILE )
{ {
+16 -16
View File
@@ -3283,13 +3283,12 @@ void BillyBlocksDoorCallback( void )
BOOLEAN HookerInRoom( UINT16 usRoom ) BOOLEAN HookerInRoom( UINT16 usRoom )
{ {
//DBrot: More Rooms //DBrot: More Rooms
UINT16 ubLoop;//, ubTempRoom;
UINT16 usTempRoom; UINT16 usTempRoom;
SOLDIERTYPE * pSoldier; SOLDIERTYPE * pSoldier;
for ( ubLoop = gTacticalStatus.Team[ CIV_TEAM ].bFirstID; ubLoop <= gTacticalStatus.Team[ CIV_TEAM ].bLastID; ubLoop++ ) for ( SoldierID ubLoop = gTacticalStatus.Team[ CIV_TEAM ].bFirstID; ubLoop <= gTacticalStatus.Team[ CIV_TEAM ].bLastID; ++ubLoop )
{ {
pSoldier = MercPtrs[ ubLoop ]; pSoldier = ubLoop;
if ( pSoldier->bActive && pSoldier->bInSector && pSoldier->stats.bLife >= OKLIFE && pSoldier->aiData.bNeutral && pSoldier->ubBodyType == MINICIV ) if ( pSoldier->bActive && pSoldier->bInSector && pSoldier->stats.bLife >= OKLIFE && pSoldier->aiData.bNeutral && pSoldier->ubBodyType == MINICIV )
{ {
@@ -4292,7 +4291,7 @@ void HandleExplosionQueue( void )
if (gfExplosionQueueMayHaveChangedSight) if (gfExplosionQueueMayHaveChangedSight)
{ {
UINT16 ubLoop; SoldierID ubLoop;
SOLDIERTYPE * pTeamSoldier; SOLDIERTYPE * pTeamSoldier;
// set variable so we may at least have someone to resolve interrupts vs // set variable so we may at least have someone to resolve interrupts vs
@@ -4301,8 +4300,9 @@ void HandleExplosionQueue( void )
// call fov code // call fov code
ubLoop = gTacticalStatus.Team[ gbPlayerNum ].bFirstID; ubLoop = gTacticalStatus.Team[ gbPlayerNum ].bFirstID;
for ( pTeamSoldier = MercPtrs[ ubLoop ]; ubLoop <= gTacticalStatus.Team[ gbPlayerNum ].bLastID; ubLoop++, pTeamSoldier++ ) for ( ; ubLoop <= gTacticalStatus.Team[ gbPlayerNum ].bLastID; ++ubLoop )
{ {
pTeamSoldier = ubLoop;
if ( pTeamSoldier->bActive && pTeamSoldier->bInSector ) if ( pTeamSoldier->bActive && pTeamSoldier->bInSector )
{ {
RevealRoofsAndItems( pTeamSoldier, TRUE, FALSE, pTeamSoldier->pathing.bLevel, FALSE ); RevealRoofsAndItems( pTeamSoldier, TRUE, FALSE, pTeamSoldier->pathing.bLevel, FALSE );
@@ -4442,17 +4442,17 @@ void HandleExplosionWarningAnimations( )
// soldiers // soldiers
if (!fShow) if (!fShow)
{ {
for (UINT32 ubID = gTacticalStatus.Team[OUR_TEAM].bFirstID; ubID <= gTacticalStatus.Team[CIV_TEAM].bLastID; ++ubID) for ( SoldierID ubID = gTacticalStatus.Team[OUR_TEAM].bFirstID; ubID <= gTacticalStatus.Team[CIV_TEAM].bLastID; ++ubID)
{ {
if (ubID != pSoldier->ubID && if (ubID != pSoldier->ubID &&
MercPtrs[ubID] && ubID != NOBODY &&
MercPtrs[ubID]->sGridNo == sSpot && ubID->sGridNo == sSpot &&
MercPtrs[ubID]->bVisible == TRUE && ubID->bVisible == TRUE &&
MercPtrs[ubID]->pathing.bLevel == bLevel && ubID->pathing.bLevel == bLevel &&
gAnimControl[MercPtrs[ubID]->usAnimState].ubEndHeight == ANIM_PRONE && gAnimControl[ubID->usAnimState].ubEndHeight == ANIM_PRONE &&
!Water(MercPtrs[ubID]->sGridNo, MercPtrs[ubID]->pathing.bLevel) && !Water(ubID->sGridNo, ubID->pathing.bLevel) &&
pSoldier->ubBodyType <= REGFEMALE && pSoldier->ubBodyType <= REGFEMALE &&
(MercPtrs[ubID]->bTeam == pSoldier->bTeam || MercPtrs[ubID]->IsUnconscious() || MercPtrs[ubID]->stats.bLife < OKLIFE)) (ubID->bTeam == pSoldier->bTeam || ubID->IsUnconscious() || ubID->stats.bLife < OKLIFE))
{ {
fShow = TRUE; fShow = TRUE;
} }
@@ -5308,7 +5308,6 @@ void UpdateSAMDoneRepair( INT16 sSectorX, INT16 sSectorY, INT16 sSectorZ )
void HandleBuldingDestruction( INT32 sGridNo, SoldierID ubOwner ) void HandleBuldingDestruction( INT32 sGridNo, SoldierID ubOwner )
{ {
SOLDIERTYPE * pSoldier; SOLDIERTYPE * pSoldier;
UINT16 cnt;
if ( ubOwner == NOBODY ) if ( ubOwner == NOBODY )
{ {
@@ -5324,9 +5323,10 @@ void HandleBuldingDestruction( INT32 sGridNo, SoldierID ubOwner )
if ( sGridNo == NOWHERE || !InARoom( sGridNo, NULL ) ) if ( sGridNo == NOWHERE || !InARoom( sGridNo, NULL ) )
return; return;
cnt = gTacticalStatus.Team[ CIV_TEAM ].bFirstID; SoldierID cnt = gTacticalStatus.Team[ CIV_TEAM ].bFirstID;
for ( pSoldier = MercPtrs[ cnt ]; cnt <= gTacticalStatus.Team[ CIV_TEAM ].bLastID; cnt++ ,pSoldier++ ) for ( ; cnt <= gTacticalStatus.Team[ CIV_TEAM ].bLastID; ++cnt )
{ {
pSoldier = cnt;
if ( pSoldier->bActive && pSoldier->bInSector && pSoldier->stats.bLife && pSoldier->aiData.bNeutral ) if ( pSoldier->bActive && pSoldier->bInSector && pSoldier->stats.bLife && pSoldier->aiData.bNeutral )
{ {
if ( pSoldier->ubProfile != NO_PROFILE ) if ( pSoldier->ubProfile != NO_PROFILE )
+4 -3
View File
@@ -1336,10 +1336,11 @@ INT32 RandomGridNo()
BOOLEAN GridNoNearPlayerMercs( INT32 sGridNo, INT16 sRadius ) BOOLEAN GridNoNearPlayerMercs( INT32 sGridNo, INT16 sRadius )
{ {
SOLDIERTYPE* pTeamSoldier = NULL; SOLDIERTYPE* pTeamSoldier = NULL;
INT32 cnt = gTacticalStatus.Team[ OUR_TEAM ].bFirstID; SoldierID cnt = gTacticalStatus.Team[ OUR_TEAM ].bFirstID;
INT32 lastid = gTacticalStatus.Team[ OUR_TEAM ].bLastID; SoldierID lastid = gTacticalStatus.Team[ OUR_TEAM ].bLastID;
for ( pTeamSoldier = MercPtrs[ cnt ]; cnt < lastid; ++cnt, ++pTeamSoldier) for ( ; cnt < lastid; ++cnt )
{ {
pTeamSoldier = cnt;
if ( pTeamSoldier && pTeamSoldier->bActive && pTeamSoldier->bInSector ) if ( pTeamSoldier && pTeamSoldier->bActive && pTeamSoldier->bInSector )
{ {
if ( PythSpacesAway(sGridNo, pTeamSoldier->sGridNo) < sRadius ) if ( PythSpacesAway(sGridNo, pTeamSoldier->sGridNo) < sRadius )
+7 -7
View File
@@ -227,7 +227,7 @@ void InitTacticalPlacementGUI()
{ {
islocked=0;//hayden islocked=0;//hayden
VOBJECT_DESC VObjectDesc; VOBJECT_DESC VObjectDesc;
INT32 i, xp, yp; INT32 xp, yp;
UINT8 ubFaceIndex; UINT8 ubFaceIndex;
gfTacticalPlacementGUIActive = TRUE; gfTacticalPlacementGUIActive = TRUE;
gfTacticalPlacementGUIDirty = TRUE; gfTacticalPlacementGUIDirty = TRUE;
@@ -325,9 +325,9 @@ void InitTacticalPlacementGUI()
//First pass: Count the number of mercs that are going to be placed by the player. //First pass: Count the number of mercs that are going to be placed by the player.
// This determines the size of the array we will allocate. // This determines the size of the array we will allocate.
giPlacements = 0; giPlacements = 0;
for( i = gTacticalStatus.Team[ OUR_TEAM ].bFirstID; i <= gTacticalStatus.Team[ OUR_TEAM ].bLastID; ++i ) for( SoldierID i = gTacticalStatus.Team[ OUR_TEAM ].bFirstID; i <= gTacticalStatus.Team[ OUR_TEAM ].bLastID; ++i )
{ {
SOLDIERTYPE *pSoldier = MercPtrs[i]; SOLDIERTYPE *pSoldier = i;
if( pSoldier->bActive && !pSoldier->flags.fBetweenSectors && if( pSoldier->bActive && !pSoldier->flags.fBetweenSectors &&
CurrentBattleSectorIs( pSoldier->sSectorX, pSoldier->sSectorY, pSoldier->bSectorZ ) && CurrentBattleSectorIs( pSoldier->sSectorX, pSoldier->sSectorY, pSoldier->bSectorZ ) &&
!( pSoldier->flags.uiStatusFlags & ( SOLDIER_VEHICLE ) ) && // ATE Ignore vehicles !( pSoldier->flags.uiStatusFlags & ( SOLDIER_VEHICLE ) ) && // ATE Ignore vehicles
@@ -345,9 +345,9 @@ void InitTacticalPlacementGUI()
Assert( gMercPlacement ); Assert( gMercPlacement );
//Second pass: Assign the mercs to their respective slots. //Second pass: Assign the mercs to their respective slots.
giPlacements = 0; giPlacements = 0;
for( i = gTacticalStatus.Team[ OUR_TEAM ].bFirstID; i <= gTacticalStatus.Team[ OUR_TEAM ].bLastID; ++i ) for( SoldierID i = gTacticalStatus.Team[ OUR_TEAM ].bFirstID; i <= gTacticalStatus.Team[ OUR_TEAM ].bLastID; ++i )
{ {
SOLDIERTYPE *pSoldier = MercPtrs[i]; SOLDIERTYPE *pSoldier = i;
if( pSoldier->bActive && pSoldier->stats.bLife && !pSoldier->flags.fBetweenSectors && if( pSoldier->bActive && pSoldier->stats.bLife && !pSoldier->flags.fBetweenSectors &&
CurrentBattleSectorIs( pSoldier->sSectorX, pSoldier->sSectorY, pSoldier->bSectorZ ) && CurrentBattleSectorIs( pSoldier->sSectorX, pSoldier->sSectorY, pSoldier->bSectorZ ) &&
pSoldier->bAssignment != ASSIGNMENT_POW && pSoldier->bAssignment != ASSIGNMENT_POW &&
@@ -426,7 +426,7 @@ void InitTacticalPlacementGUI()
} }
//add all the faces now //add all the faces now
for( i = 0; i < giPlacements; ++i ) for( INT32 i = 0; i < giPlacements; ++i )
{ {
VObjectDesc.fCreateFlags = VOBJECT_CREATE_FROMFILE; VObjectDesc.fCreateFlags = VOBJECT_CREATE_FROMFILE;
@@ -483,7 +483,7 @@ void InitTacticalPlacementGUI()
{ {
ButtonList[ iTPButtons[ GROUP_BUTTON ] ]->uiFlags |= BUTTON_CLICKED_ON; ButtonList[ iTPButtons[ GROUP_BUTTON ] ]->uiFlags |= BUTTON_CLICKED_ON;
for( i = 0; i < giPlacements; ++i ) for( INT32 i = 0; i < giPlacements; ++i )
{ //go from the currently selected soldier to the end { //go from the currently selected soldier to the end
if( !gMercPlacement[ i ].fPlaced ) if( !gMercPlacement[ i ].fPlaced )
{ //Found an unplaced merc. Select him. { //Found an unplaced merc. Select him.