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
+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 )
{
UINT16 ubLoop;
SOLDIERTYPE * pTeamSoldier;
MERCPROFILESTRUCT * pProfile;
SoldierID id;
SOLDIERTYPE *pTeamSoldier;
MERCPROFILESTRUCT *pProfile;
gfSomeoneSaidMoraleQuote = FALSE;
@@ -778,9 +778,10 @@ void HandleMoraleEvent( SOLDIERTYPE *pSoldier, INT8 bMoraleEvent, INT16 sMapX, I
case MORALE_BATTLE_WON:
// affects everyone to varying degrees
ubLoop = gTacticalStatus.Team[ gbPlayerNum ].bFirstID;
for ( pTeamSoldier = MercPtrs[ ubLoop ]; ubLoop <= gTacticalStatus.Team[ gbPlayerNum ].bLastID; ubLoop++, pTeamSoldier++ )
id = gTacticalStatus.Team[ gbPlayerNum ].bFirstID;
for ( ; id <= gTacticalStatus.Team[ gbPlayerNum ].bLastID; ++id )
{
pTeamSoldier = id;
if ( pTeamSoldier->bActive )
{
if ( SOLDIER_IN_SECTOR( pTeamSoldier, sMapX, sMapY, bMapZ ) )
@@ -797,9 +798,10 @@ void HandleMoraleEvent( SOLDIERTYPE *pSoldier, INT8 bMoraleEvent, INT16 sMapX, I
break;
case MORALE_RAN_AWAY:
// affects everyone to varying degrees
ubLoop = gTacticalStatus.Team[ gbPlayerNum ].bFirstID;
for ( pTeamSoldier = MercPtrs[ ubLoop ]; ubLoop <= gTacticalStatus.Team[ gbPlayerNum ].bLastID; ubLoop++, pTeamSoldier++ )
id = gTacticalStatus.Team[ gbPlayerNum ].bFirstID;
for ( ; id <= gTacticalStatus.Team[ gbPlayerNum ].bLastID; ++id )
{
pTeamSoldier = id;
if ( pTeamSoldier->bActive )
{
// 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_DEIDRANNA_KILLED:
// affects everyone, everywhere
ubLoop = gTacticalStatus.Team[ gbPlayerNum ].bFirstID;
for ( pTeamSoldier = MercPtrs[ ubLoop ]; ubLoop <= gTacticalStatus.Team[ gbPlayerNum ].bLastID; ubLoop++, pTeamSoldier++ )
id = gTacticalStatus.Team[gbPlayerNum].bFirstID;
for ( ; id <= gTacticalStatus.Team[gbPlayerNum].bLastID; ++id )
{
pTeamSoldier = id;
if ( pTeamSoldier->bActive )
{
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_AIRSTRIKE:
// affects every in sector
ubLoop = gTacticalStatus.Team[ gbPlayerNum ].bFirstID;
for ( pTeamSoldier = MercPtrs[ ubLoop ]; ubLoop <= gTacticalStatus.Team[ gbPlayerNum ].bLastID; ubLoop++, pTeamSoldier++ )
id = gTacticalStatus.Team[gbPlayerNum].bFirstID;
for ( ; id <= gTacticalStatus.Team[gbPlayerNum].bLastID; ++id )
{
pTeamSoldier = id;
if ( pTeamSoldier->bActive && SOLDIER_IN_SECTOR( pTeamSoldier, sMapX, sMapY, bMapZ ) )
{
HandleMoraleEventForSoldier( pTeamSoldier, bMoraleEvent );
@@ -913,9 +917,10 @@ void HandleMoraleEvent( SOLDIERTYPE *pSoldier, INT8 bMoraleEvent, INT16 sMapX, I
Assert( pSoldier );
// affects everyone
ubLoop = gTacticalStatus.Team[ gbPlayerNum ].bFirstID;
for ( pTeamSoldier = MercPtrs[ ubLoop ]; ubLoop <= gTacticalStatus.Team[ gbPlayerNum ].bLastID; ubLoop++, pTeamSoldier++ )
id = gTacticalStatus.Team[gbPlayerNum].bFirstID;
for ( ; id <= gTacticalStatus.Team[gbPlayerNum].bLastID; ++id )
{
pTeamSoldier = id;
if ( pTeamSoldier->bActive )
{
HandleMoraleEventForSoldier( pTeamSoldier, bMoraleEvent );
@@ -927,9 +932,10 @@ void HandleMoraleEvent( SOLDIERTYPE *pSoldier, INT8 bMoraleEvent, INT16 sMapX, I
Assert( pSoldier );
// affects everyone, in sector differently than not, extra bonuses if it's a buddy or hated merc
ubLoop = gTacticalStatus.Team[ gbPlayerNum ].bFirstID;
for ( pTeamSoldier = MercPtrs[ ubLoop ]; ubLoop <= gTacticalStatus.Team[ gbPlayerNum ].bLastID; ubLoop++, pTeamSoldier++ )
id = gTacticalStatus.Team[gbPlayerNum].bFirstID;
for ( ; id <= gTacticalStatus.Team[gbPlayerNum].bLastID; ++id )
{
pTeamSoldier = id;
if ( pTeamSoldier->bActive && pTeamSoldier->ubProfile != NO_PROFILE)
{
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)
// gentlemen males get unhappy too
ubLoop = gTacticalStatus.Team[ gbPlayerNum ].bFirstID;
for ( pTeamSoldier = MercPtrs[ ubLoop ]; ubLoop <= gTacticalStatus.Team[ gbPlayerNum ].bLastID; ubLoop++, pTeamSoldier++ )
id = gTacticalStatus.Team[gbPlayerNum].bFirstID;
for ( ; id <= gTacticalStatus.Team[gbPlayerNum].bLastID; ++id )
{
pTeamSoldier = id;
if ( pTeamSoldier->bActive && pTeamSoldier->ubProfile != NO_PROFILE )
{
if ( WhichHated( pTeamSoldier->ubProfile, pSoldier->ubProfile ) != -1 )
@@ -1044,9 +1051,10 @@ void HandleMoraleEvent( SOLDIERTYPE *pSoldier, INT8 bMoraleEvent, INT16 sMapX, I
case MORALE_ENEMYGROUP_COWARD:
// affects coward in sector
ubLoop = gTacticalStatus.Team[gbPlayerNum].bFirstID;
for ( pTeamSoldier = MercPtrs[ubLoop]; ubLoop <= gTacticalStatus.Team[gbPlayerNum].bLastID; ubLoop++, pTeamSoldier++ )
id = gTacticalStatus.Team[gbPlayerNum].bFirstID;
for ( ; id <= gTacticalStatus.Team[gbPlayerNum].bLastID; ++id )
{
pTeamSoldier = id;
if ( pTeamSoldier->bActive && (pTeamSoldier->sSectorX == sMapX) && (pTeamSoldier->sSectorY == sMapY) && (pTeamSoldier->bSectorZ == bMapZ) )
{
if ( DoesMercHavePersonality( pTeamSoldier, CHAR_TRAIT_COWARD ) )
@@ -1142,27 +1150,28 @@ void HandleMoraleEvent( SOLDIERTYPE *pSoldier, INT8 bMoraleEvent, INT16 sMapX, I
void HourlyMoraleUpdate( void )
{
UINT16 bMercID, bOtherID, bLastTeamID;
INT8 bActualTeamOpinion;
INT8 bTeamMoraleModChange, bTeamMoraleModDiff;
INT8 bOpinion=-1;
INT32 iTotalOpinions;
INT8 bNumTeamMembers;
INT8 bHighestTeamLeadership = 0;
SOLDIERTYPE * pSoldier;
SOLDIERTYPE * pOtherSoldier;
MERCPROFILESTRUCT * pProfile;
BOOLEAN fSameGroupOnly;
static INT8 bStrategicMoraleUpdateCounter = 0;
BOOLEAN fFoundHated = FALSE;
INT8 bHated;
SoldierID bMercID, bOtherID, bLastTeamID;
INT8 bActualTeamOpinion;
INT8 bTeamMoraleModChange, bTeamMoraleModDiff;
INT8 bOpinion=-1;
INT32 iTotalOpinions;
INT8 bNumTeamMembers;
INT8 bHighestTeamLeadership = 0;
SOLDIERTYPE *pSoldier;
SOLDIERTYPE *pOtherSoldier;
MERCPROFILESTRUCT *pProfile;
BOOLEAN fSameGroupOnly;
static INT8 bStrategicMoraleUpdateCounter = 0;
BOOLEAN fFoundHated = FALSE;
INT8 bHated;
bMercID = gTacticalStatus.Team[ gbPlayerNum ].bFirstID;
bLastTeamID = gTacticalStatus.Team[ gbPlayerNum ].bLastID;
// 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 ( pSoldier->bActive && pSoldier->ubProfile != NO_PROFILE &&
!(pSoldier->bAssignment == IN_TRANSIT ||
@@ -1194,8 +1203,9 @@ void HourlyMoraleUpdate( void )
// loop through all other mercs
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
if (bOtherID != bMercID && pOtherSoldier->bActive && pOtherSoldier->ubProfile != NO_PROFILE &&
!(pOtherSoldier->bAssignment == IN_TRANSIT ||
@@ -1345,13 +1355,12 @@ void HourlyMoraleUpdate( void )
void HandleSnitchCheck( void )
{
UINT16 bMercID, bOtherID;
INT8 bOpinion = -1;
UINT16 bLastTeamID;
SOLDIERTYPE* pSoldier;
SOLDIERTYPE* pOtherSoldier;
MERCPROFILESTRUCT* pProfile;
BOOLEAN fSameGroupOnly;
SoldierID bMercID, bOtherID, bLastTeamID;
INT8 bOpinion = -1;
SOLDIERTYPE *pSoldier;
SOLDIERTYPE *pOtherSoldier;
MERCPROFILESTRUCT *pProfile;
BOOLEAN fSameGroupOnly;
// anv: save merc id and his negative morale event for snitches
std::vector<SnitchEvent> snitcheventvector;
@@ -1359,8 +1368,9 @@ void HandleSnitchCheck( void )
bLastTeamID = gTacticalStatus.Team[gbPlayerNum].bLastID;
// 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 ( pSoldier && pSoldier->bActive && pSoldier->ubProfile != NO_PROFILE &&
!(pSoldier->bAssignment == IN_TRANSIT ||
@@ -1383,8 +1393,9 @@ void HandleSnitchCheck( void )
}
// loop through all other mercs
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
if ( bOtherID != bMercID && pOtherSoldier && pOtherSoldier->bActive && pOtherSoldier->ubProfile != NO_PROFILE &&
!(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 )
{
UINT16 bSnitchID;
SoldierID bSnitchID;
INT16 sSnitchingChance = 0;
UINT8 ubSnitchProfile;
SOLDIERTYPE * pSnitch;
@@ -1570,8 +1581,9 @@ void RememberSnitchableEvent( UINT8 ubTargetProfile, UINT8 ubSecondaryTargetProf
// loop through all other mercs
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;
// skip past ourselves and all inactive mercs
if ( ProfileHasSkillTrait( ubSnitchProfile, SNITCH_NT ) &&
@@ -1703,10 +1715,10 @@ void DailyMoraleUpdate(SOLDIERTYPE *pSoldier)
// Added by SANDRO
BOOLEAN IsShowOffNearBy( SOLDIERTYPE * pSoldier )
{
UINT32 uiLoop;
SOLDIERTYPE * pTeammate;
BOOLEAN fOneException = FALSE;
BOOLEAN fYesHeIs = FALSE;
SoldierID uiLoop;
SOLDIERTYPE *pTeammate;
BOOLEAN fOneException = FALSE;
BOOLEAN fYesHeIs = FALSE;
if (!pSoldier)
{
@@ -1717,9 +1729,9 @@ BOOLEAN IsShowOffNearBy( SOLDIERTYPE * pSoldier )
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 )
{
continue;