mirror of
https://github.com/1dot13/source.git
synced 2026-08-05 14:00:23 +02:00
Merged New Inventory Project into main branch
git-svn-id: https://ja2svn.mooo.com/source/ja2/trunk/GameSource/ja2_v1.13/Build@1871 3b4a5df2-a311-0410-b5c6-a8a6f20db521
This commit is contained in:
+89
-89
@@ -33,7 +33,7 @@
|
||||
|
||||
|
||||
// macros
|
||||
#define SOLDIER_IN_SECTOR( pSoldier, sX, sY, bZ ) ( !pSoldier->fBetweenSectors && ( pSoldier->sSectorX == sX ) && ( pSoldier->sSectorY == sY ) && ( pSoldier->bSectorZ == bZ ) )
|
||||
#define SOLDIER_IN_SECTOR( pSoldier, sX, sY, bZ ) ( !pSoldier->flags.fBetweenSectors && ( pSoldier->sSectorX == sX ) && ( pSoldier->sSectorY == sY ) && ( pSoldier->bSectorZ == bZ ) )
|
||||
|
||||
|
||||
|
||||
@@ -41,7 +41,7 @@ MoraleEvent gbMoraleEvent[NUM_MORALE_EVENTS] =
|
||||
{
|
||||
// TACTICAL = Short Term Effect, STRATEGIC = Long Term Effect
|
||||
{ TACTICAL_MORALE_EVENT, +4}, // MORALE_KILLED_ENEMY
|
||||
{ TACTICAL_MORALE_EVENT, -5}, // MORALE_SQUADMATE_DIED, // in same sector (not really squad)... IN ADDITION to strategic loss of morale
|
||||
{ TACTICAL_MORALE_EVENT, -5}, // MORALE_SQUADMATE_DIED, // in same sector (not really squad)... IN ADDITION to strategic loss of morale
|
||||
{ TACTICAL_MORALE_EVENT, -1}, // MORALE_SUPPRESSED, // up to 4 times per turn
|
||||
{ TACTICAL_MORALE_EVENT, -2}, // MORALE_AIRSTRIKE,
|
||||
{ TACTICAL_MORALE_EVENT, +2}, // MORALE_DID_LOTS_OF_DAMAGE,
|
||||
@@ -57,24 +57,24 @@ MoraleEvent gbMoraleEvent[NUM_MORALE_EVENTS] =
|
||||
{ STRATEGIC_MORALE_EVENT, -8}, // MORALE_MINE_LOST,
|
||||
{ STRATEGIC_MORALE_EVENT, +3}, // MORALE_SAM_SITE_LIBERATED,
|
||||
{ STRATEGIC_MORALE_EVENT, -3}, // MORALE_SAM_SITE_LOST,
|
||||
{ STRATEGIC_MORALE_EVENT, -15}, // MORALE_BUDDY_DIED,
|
||||
{ STRATEGIC_MORALE_EVENT, -15}, // MORALE_BUDDY_DIED,
|
||||
{ STRATEGIC_MORALE_EVENT, +5}, // MORALE_HATED_DIED,
|
||||
{ STRATEGIC_MORALE_EVENT, -5}, // MORALE_TEAMMATE_DIED, // not in same sector
|
||||
{ STRATEGIC_MORALE_EVENT, +5}, // MORALE_LOW_DEATHRATE,
|
||||
{ STRATEGIC_MORALE_EVENT, -5}, // MORALE_HIGH_DEATHRATE,
|
||||
{ STRATEGIC_MORALE_EVENT, +2}, // MORALE_GREAT_MORALE,
|
||||
{ STRATEGIC_MORALE_EVENT, -2}, // MORALE_POOR_MORALE,
|
||||
{ TACTICAL_MORALE_EVENT, -10}, // MORALE_DRUGS_CRASH
|
||||
{ TACTICAL_MORALE_EVENT, -10}, // MORALE_ALCOHOL_CRASH
|
||||
{ STRATEGIC_MORALE_EVENT, +15}, // MORALE_MONSTER_QUEEN_KILLED
|
||||
{ STRATEGIC_MORALE_EVENT, +25}, // MORALE_DEIDRANNA_KILLED
|
||||
{ TACTICAL_MORALE_EVENT, -10}, // MORALE_DRUGS_CRASH
|
||||
{ TACTICAL_MORALE_EVENT, -10}, // MORALE_ALCOHOL_CRASH
|
||||
{ STRATEGIC_MORALE_EVENT, +15}, // MORALE_MONSTER_QUEEN_KILLED
|
||||
{ STRATEGIC_MORALE_EVENT, +25}, // MORALE_DEIDRANNA_KILLED
|
||||
{ TACTICAL_MORALE_EVENT, -1}, // MORALE_CLAUSTROPHOBE_UNDERGROUND,
|
||||
{ TACTICAL_MORALE_EVENT, -5}, // MORALE_INSECT_PHOBIC_SEES_CREATURE,
|
||||
{ TACTICAL_MORALE_EVENT, -1}, // MORALE_NERVOUS_ALONE,
|
||||
{ STRATEGIC_MORALE_EVENT, -5}, // MORALE_MERC_CAPTURED,
|
||||
{ STRATEGIC_MORALE_EVENT, -5}, // MORALE_MERC_CAPTURED,
|
||||
{ STRATEGIC_MORALE_EVENT, -5}, // MORALE_MERC_MARRIED,
|
||||
{ STRATEGIC_MORALE_EVENT, +8}, // MORALE_QUEEN_BATTLE_WON,
|
||||
{ STRATEGIC_MORALE_EVENT, +5}, // MORALE_SEX,
|
||||
{ STRATEGIC_MORALE_EVENT, +5}, // MORALE_SEX,
|
||||
};
|
||||
|
||||
BOOLEAN gfSomeoneSaidMoraleQuote = FALSE;
|
||||
@@ -82,23 +82,23 @@ BOOLEAN gfSomeoneSaidMoraleQuote = FALSE;
|
||||
|
||||
INT8 GetMoraleModifier( SOLDIERTYPE * pSoldier )
|
||||
{
|
||||
if (pSoldier->uiStatusFlags & SOLDIER_PC)
|
||||
if (pSoldier->flags.uiStatusFlags & SOLDIER_PC)
|
||||
{
|
||||
if (pSoldier->bMorale > 50)
|
||||
if (pSoldier->aiData.bMorale > 50)
|
||||
{
|
||||
// give +1 at 55, +3 at 65, up to +5 at 95 and above
|
||||
return( (pSoldier->bMorale - 45) / 10 );
|
||||
return( (pSoldier->aiData.bMorale - 45) / 10 );
|
||||
}
|
||||
else
|
||||
{
|
||||
// give penalties down to -20 at 0 (-2 at 45, -4 by 40...)
|
||||
return( (pSoldier->bMorale - 50) * 2 / 5 );
|
||||
return( (pSoldier->aiData.bMorale - 50) * 2 / 5 );
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
// use AI morale
|
||||
switch( pSoldier->bAIMorale )
|
||||
switch( pSoldier->aiData.bAIMorale )
|
||||
{
|
||||
case MORALE_HOPELESS:
|
||||
return( -15 );
|
||||
@@ -118,16 +118,16 @@ INT8 GetMoraleModifier( SOLDIERTYPE * pSoldier )
|
||||
void DecayTacticalMorale( SOLDIERTYPE * pSoldier )
|
||||
{
|
||||
// decay the tactical morale modifier
|
||||
if (pSoldier->bTacticalMoraleMod != 0)
|
||||
if (pSoldier->aiData.bTacticalMoraleMod != 0)
|
||||
{
|
||||
// decay the modifier!
|
||||
if (pSoldier->bTacticalMoraleMod > 0)
|
||||
if (pSoldier->aiData.bTacticalMoraleMod > 0)
|
||||
{
|
||||
pSoldier->bTacticalMoraleMod = __max( 0, pSoldier->bTacticalMoraleMod - (8 - pSoldier->bTacticalMoraleMod / 10) );
|
||||
pSoldier->aiData.bTacticalMoraleMod = __max( 0, pSoldier->aiData.bTacticalMoraleMod - (8 - pSoldier->aiData.bTacticalMoraleMod / 10) );
|
||||
}
|
||||
else
|
||||
{
|
||||
pSoldier->bTacticalMoraleMod = __min( 0, pSoldier->bTacticalMoraleMod + (6 + pSoldier->bTacticalMoraleMod / 10) );
|
||||
pSoldier->aiData.bTacticalMoraleMod = __min( 0, pSoldier->aiData.bTacticalMoraleMod + (6 + pSoldier->aiData.bTacticalMoraleMod / 10) );
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -135,13 +135,13 @@ void DecayTacticalMorale( SOLDIERTYPE * pSoldier )
|
||||
void DecayStrategicMorale( SOLDIERTYPE * pSoldier )
|
||||
{
|
||||
// decay the modifier!
|
||||
if (pSoldier->bStrategicMoraleMod > 0)
|
||||
if (pSoldier->aiData.bStrategicMoraleMod > 0)
|
||||
{
|
||||
pSoldier->bStrategicMoraleMod = __max( 0, pSoldier->bStrategicMoraleMod - (8 - pSoldier->bStrategicMoraleMod / 10) );
|
||||
pSoldier->aiData.bStrategicMoraleMod = __max( 0, pSoldier->aiData.bStrategicMoraleMod - (8 - pSoldier->aiData.bStrategicMoraleMod / 10) );
|
||||
}
|
||||
else
|
||||
{
|
||||
pSoldier->bStrategicMoraleMod = __min( 0, pSoldier->bStrategicMoraleMod + (6 + pSoldier->bStrategicMoraleMod / 10) );
|
||||
pSoldier->aiData.bStrategicMoraleMod = __min( 0, pSoldier->aiData.bStrategicMoraleMod + (6 + pSoldier->aiData.bStrategicMoraleMod / 10) );
|
||||
}
|
||||
}
|
||||
|
||||
@@ -153,15 +153,15 @@ void DecayTacticalMoraleModifiers( void )
|
||||
|
||||
ubLoop = gTacticalStatus.Team[ gbPlayerNum ].bFirstID;
|
||||
for ( pSoldier = MercPtrs[ ubLoop ]; ubLoop <= gTacticalStatus.Team[ gbPlayerNum ].bLastID; ubLoop++, pSoldier++ )
|
||||
{
|
||||
{
|
||||
//if the merc is active, in Arulco
|
||||
// CJC: decay modifiers while asleep! or POW!
|
||||
if ( pSoldier->bActive && pSoldier->ubProfile != NO_PROFILE &&
|
||||
if ( pSoldier->bActive && pSoldier->ubProfile != NO_PROFILE &&
|
||||
!(pSoldier->bAssignment == IN_TRANSIT ||
|
||||
pSoldier->bAssignment == ASSIGNMENT_DEAD ) )
|
||||
{
|
||||
// only let morale mod decay if it is positive while merc is a POW
|
||||
if ( pSoldier->bAssignment == ASSIGNMENT_POW && pSoldier->bTacticalMoraleMod < 0 )
|
||||
if ( pSoldier->bAssignment == ASSIGNMENT_POW && pSoldier->aiData.bTacticalMoraleMod < 0 )
|
||||
{
|
||||
continue;
|
||||
}
|
||||
@@ -170,9 +170,9 @@ void DecayTacticalMoraleModifiers( void )
|
||||
{
|
||||
case CLAUSTROPHOBIC:
|
||||
if ( pSoldier->bSectorZ > 0 )
|
||||
{
|
||||
{
|
||||
// underground, no recovery... in fact, if tact morale is high, decay
|
||||
if ( pSoldier->bTacticalMoraleMod > PHOBIC_LIMIT )
|
||||
if ( pSoldier->aiData.bTacticalMoraleMod > PHOBIC_LIMIT )
|
||||
{
|
||||
HandleMoraleEvent( pSoldier, MORALE_CLAUSTROPHOBE_UNDERGROUND, pSoldier->sSectorX, pSoldier->sSectorY, pSoldier->bSectorZ );
|
||||
}
|
||||
@@ -180,7 +180,7 @@ void DecayTacticalMoraleModifiers( void )
|
||||
}
|
||||
break;
|
||||
case NERVOUS:
|
||||
if ( pSoldier->bMorale < 50 )
|
||||
if ( pSoldier->aiData.bMorale < 50 )
|
||||
{
|
||||
if (pSoldier->ubGroupID != 0 && PlayerIDGroupInMotion( pSoldier->ubGroupID ))
|
||||
{
|
||||
@@ -204,7 +204,7 @@ void DecayTacticalMoraleModifiers( void )
|
||||
fHandleNervous = FALSE;
|
||||
}
|
||||
}
|
||||
else
|
||||
else
|
||||
{
|
||||
// look for anyone else in same sector
|
||||
fHandleNervous = TRUE;
|
||||
@@ -216,12 +216,12 @@ void DecayTacticalMoraleModifiers( void )
|
||||
fHandleNervous = FALSE;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if ( fHandleNervous )
|
||||
{
|
||||
if ( pSoldier->bTacticalMoraleMod == PHOBIC_LIMIT )
|
||||
if ( pSoldier->aiData.bTacticalMoraleMod == PHOBIC_LIMIT )
|
||||
{
|
||||
// don't change morale
|
||||
continue;
|
||||
@@ -252,15 +252,15 @@ void DecayStrategicMoraleModifiers( void )
|
||||
|
||||
ubLoop = gTacticalStatus.Team[ gbPlayerNum ].bFirstID;
|
||||
for ( pSoldier = MercPtrs[ ubLoop ]; ubLoop <= gTacticalStatus.Team[ gbPlayerNum ].bLastID; ubLoop++, pSoldier++ )
|
||||
{
|
||||
{
|
||||
//if the merc is active, in Arulco
|
||||
// CJC: decay modifiers while asleep! or POW!
|
||||
if ( pSoldier->bActive && pSoldier->ubProfile != NO_PROFILE &&
|
||||
if ( pSoldier->bActive && pSoldier->ubProfile != NO_PROFILE &&
|
||||
!(pSoldier->bAssignment == IN_TRANSIT ||
|
||||
pSoldier->bAssignment == ASSIGNMENT_DEAD ) )
|
||||
{
|
||||
// only let morale mod decay if it is positive while merc is a POW
|
||||
if ( pSoldier->bAssignment == ASSIGNMENT_POW && pSoldier->bStrategicMoraleMod < 0 )
|
||||
if ( pSoldier->bAssignment == ASSIGNMENT_POW && pSoldier->aiData.bStrategicMoraleMod < 0 )
|
||||
{
|
||||
continue;
|
||||
}
|
||||
@@ -277,25 +277,25 @@ void RefreshSoldierMorale( SOLDIERTYPE * pSoldier )
|
||||
{
|
||||
INT32 iActualMorale;
|
||||
|
||||
if ( pSoldier->fMercAsleep )
|
||||
if ( pSoldier->flags.fMercAsleep )
|
||||
{
|
||||
// delay this till later!
|
||||
return;
|
||||
}
|
||||
|
||||
// CJC, April 19, 1999: added up to 20% morale boost according to progress
|
||||
iActualMorale = DEFAULT_MORALE + (INT32) pSoldier->bTeamMoraleMod + (INT32) pSoldier->bTacticalMoraleMod + (INT32) pSoldier->bStrategicMoraleMod + (INT32) (CurrentPlayerProgressPercentage() / 5);
|
||||
iActualMorale = DEFAULT_MORALE + (INT32) pSoldier->aiData.bTeamMoraleMod + (INT32) pSoldier->aiData.bTacticalMoraleMod + (INT32) pSoldier->aiData.bStrategicMoraleMod + (INT32) (CurrentPlayerProgressPercentage() / 5);
|
||||
|
||||
// ATE: Modify morale based on drugs....
|
||||
iActualMorale += ( ( pSoldier->bDrugEffect[ DRUG_TYPE_ADRENALINE ] * DRUG_EFFECT_MORALE_MOD ) / 100 );
|
||||
iActualMorale += ( ( pSoldier->bDrugEffect[ DRUG_TYPE_ALCOHOL ] * ALCOHOL_EFFECT_MORALE_MOD ) / 100 );
|
||||
iActualMorale += ( ( pSoldier->drugs.bDrugEffect[ DRUG_TYPE_ADRENALINE ] * DRUG_EFFECT_MORALE_MOD ) / 100 );
|
||||
iActualMorale += ( ( pSoldier->drugs.bDrugEffect[ DRUG_TYPE_ALCOHOL ] * ALCOHOL_EFFECT_MORALE_MOD ) / 100 );
|
||||
|
||||
iActualMorale = __min( 100, iActualMorale );
|
||||
iActualMorale = __max( 0, iActualMorale );
|
||||
pSoldier->bMorale = (INT8) iActualMorale;
|
||||
pSoldier->aiData.bMorale = (INT8) iActualMorale;
|
||||
|
||||
// update mapscreen as needed
|
||||
fCharacterInfoPanelDirty = TRUE;
|
||||
fCharacterInfoPanelDirty = TRUE;
|
||||
}
|
||||
|
||||
|
||||
@@ -304,15 +304,15 @@ void UpdateSoldierMorale( SOLDIERTYPE * pSoldier, UINT8 ubType, INT8 bMoraleMod
|
||||
MERCPROFILESTRUCT * pProfile;
|
||||
INT32 iMoraleModTotal;
|
||||
|
||||
if ( !pSoldier->bActive || ( pSoldier->bLife < CONSCIOUSNESS ) ||
|
||||
( pSoldier->uiStatusFlags & SOLDIER_VEHICLE ) || AM_A_ROBOT( pSoldier ) || AM_AN_EPC( pSoldier ) )
|
||||
if ( !pSoldier->bActive || ( pSoldier->stats.bLife < CONSCIOUSNESS ) ||
|
||||
( pSoldier->flags.uiStatusFlags & SOLDIER_VEHICLE ) || AM_A_ROBOT( pSoldier ) || AM_AN_EPC( pSoldier ) )
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
if ( ( pSoldier->bAssignment == ASSIGNMENT_DEAD ) ||
|
||||
( pSoldier->bAssignment == ASSIGNMENT_POW ) ||
|
||||
( pSoldier->bAssignment == IN_TRANSIT ) )
|
||||
( pSoldier->bAssignment == ASSIGNMENT_POW ) ||
|
||||
( pSoldier->bAssignment == IN_TRANSIT ) )
|
||||
{
|
||||
return;
|
||||
}
|
||||
@@ -360,11 +360,11 @@ void UpdateSoldierMorale( SOLDIERTYPE * pSoldier, UINT8 ubType, INT8 bMoraleMod
|
||||
default:
|
||||
break;
|
||||
}
|
||||
if (pSoldier->bLevel == 1)
|
||||
if (pSoldier->pathing.bLevel == 1)
|
||||
{
|
||||
bMoraleMod--;
|
||||
}
|
||||
else if (pSoldier->bLevel > 5)
|
||||
else if (pSoldier->pathing.bLevel > 5)
|
||||
{
|
||||
bMoraleMod++;
|
||||
}
|
||||
@@ -377,10 +377,10 @@ void UpdateSoldierMorale( SOLDIERTYPE * pSoldier, UINT8 ubType, INT8 bMoraleMod
|
||||
// apply change!
|
||||
if (ubType == TACTICAL_MORALE_EVENT)
|
||||
{
|
||||
iMoraleModTotal = (INT32) pSoldier->bTacticalMoraleMod + (INT32) bMoraleMod;
|
||||
iMoraleModTotal = (INT32) pSoldier->aiData.bTacticalMoraleMod + (INT32) bMoraleMod;
|
||||
iMoraleModTotal = __min( iMoraleModTotal, MORALE_MOD_MAX );
|
||||
iMoraleModTotal = __max( iMoraleModTotal, -MORALE_MOD_MAX );
|
||||
pSoldier->bTacticalMoraleMod = (INT8) iMoraleModTotal;
|
||||
pSoldier->aiData.bTacticalMoraleMod = (INT8) iMoraleModTotal;
|
||||
}
|
||||
else if ( gTacticalStatus.fEnemyInSector && !pSoldier->bInSector ) // delayed strategic
|
||||
{
|
||||
@@ -390,21 +390,21 @@ void UpdateSoldierMorale( SOLDIERTYPE * pSoldier, UINT8 ubType, INT8 bMoraleMod
|
||||
pSoldier->bDelayedStrategicMoraleMod = (INT8) iMoraleModTotal;
|
||||
}
|
||||
else // strategic
|
||||
{
|
||||
iMoraleModTotal = (INT32) pSoldier->bStrategicMoraleMod + (INT32) bMoraleMod;
|
||||
{
|
||||
iMoraleModTotal = (INT32) pSoldier->aiData.bStrategicMoraleMod + (INT32) bMoraleMod;
|
||||
iMoraleModTotal = __min( iMoraleModTotal, MORALE_MOD_MAX );
|
||||
iMoraleModTotal = __max( iMoraleModTotal, -MORALE_MOD_MAX );
|
||||
pSoldier->bStrategicMoraleMod = (INT8) iMoraleModTotal;
|
||||
pSoldier->aiData.bStrategicMoraleMod = (INT8) iMoraleModTotal;
|
||||
}
|
||||
|
||||
RefreshSoldierMorale( pSoldier );
|
||||
|
||||
if ( !pSoldier->fMercAsleep )
|
||||
if ( !pSoldier->flags.fMercAsleep )
|
||||
{
|
||||
if ( !gfSomeoneSaidMoraleQuote )
|
||||
{
|
||||
// Check if we're below a certain value and warn
|
||||
if ( pSoldier->bMorale < 35 )
|
||||
if ( pSoldier->aiData.bMorale < 35 )
|
||||
{
|
||||
// Have we said this quote yet?
|
||||
if ( !( pSoldier->usQuoteSaidFlags & SOLDIER_QUOTE_SAID_LOW_MORAL ) )
|
||||
@@ -412,7 +412,7 @@ void UpdateSoldierMorale( SOLDIERTYPE * pSoldier, UINT8 ubType, INT8 bMoraleMod
|
||||
gfSomeoneSaidMoraleQuote = TRUE;
|
||||
|
||||
// ATE: Amde it a DELAYED QUOTE - will be delayed by the dialogue Q until it's our turn...
|
||||
DelayedTacticalCharacterDialogue( pSoldier, QUOTE_STARTING_TO_WHINE );
|
||||
DelayedTacticalCharacterDialogue( pSoldier, QUOTE_STARTING_TO_WHINE );
|
||||
pSoldier->usQuoteSaidFlags |= SOLDIER_QUOTE_SAID_LOW_MORAL;
|
||||
}
|
||||
}
|
||||
@@ -420,7 +420,7 @@ void UpdateSoldierMorale( SOLDIERTYPE * pSoldier, UINT8 ubType, INT8 bMoraleMod
|
||||
}
|
||||
|
||||
// Reset flag!
|
||||
if ( pSoldier->bMorale > 65 )
|
||||
if ( pSoldier->aiData.bMorale > 65 )
|
||||
{
|
||||
pSoldier->usQuoteSaidFlags &= (~SOLDIER_QUOTE_SAID_LOW_MORAL );
|
||||
}
|
||||
@@ -476,7 +476,7 @@ void HandleMoraleEvent( SOLDIERTYPE *pSoldier, INT8 bMoraleEvent, INT16 sMapX, I
|
||||
// needs specific soldier!
|
||||
Assert( pSoldier );
|
||||
// affects the soldier only, should be ignored if tactical morale mod is -20 or less
|
||||
if ( pSoldier->bTacticalMoraleMod > PHOBIC_LIMIT )
|
||||
if ( pSoldier->aiData.bTacticalMoraleMod > PHOBIC_LIMIT )
|
||||
{
|
||||
HandleMoraleEventForSoldier( pSoldier, bMoraleEvent );
|
||||
}
|
||||
@@ -510,7 +510,7 @@ void HandleMoraleEvent( SOLDIERTYPE *pSoldier, INT8 bMoraleEvent, INT16 sMapX, I
|
||||
// CJC: adding to SOLDIER_IN_SECTOR check special stuff because the old sector values might
|
||||
// be appropriate (because in transit going out of that sector!)
|
||||
|
||||
if ( SOLDIER_IN_SECTOR( pTeamSoldier, sMapX, sMapY, bMapZ ) || ( pTeamSoldier->fBetweenSectors && ((pTeamSoldier->ubPrevSectorID % 16) + 1) == sMapX && ((pTeamSoldier->ubPrevSectorID / 16) + 1) == sMapY && ( pTeamSoldier->bSectorZ == bMapZ ) ) )
|
||||
if ( SOLDIER_IN_SECTOR( pTeamSoldier, sMapX, sMapY, bMapZ ) || ( pTeamSoldier->flags.fBetweenSectors && ((pTeamSoldier->ubPrevSectorID % 16) + 1) == sMapX && ((pTeamSoldier->ubPrevSectorID / 16) + 1) == sMapY && ( pTeamSoldier->bSectorZ == bMapZ ) ) )
|
||||
{
|
||||
switch ( gMercProfiles[ pTeamSoldier->ubProfile ].bAttitude )
|
||||
{
|
||||
@@ -595,7 +595,7 @@ void HandleMoraleEvent( SOLDIERTYPE *pSoldier, INT8 bMoraleEvent, INT16 sMapX, I
|
||||
for ( pTeamSoldier = MercPtrs[ ubLoop ]; ubLoop <= gTacticalStatus.Team[ gbPlayerNum ].bLastID; ubLoop++, pTeamSoldier++ )
|
||||
{
|
||||
if ( pTeamSoldier->bActive && pTeamSoldier->ubProfile != NO_PROFILE)
|
||||
{
|
||||
{
|
||||
pProfile = &(gMercProfiles[ pTeamSoldier->ubProfile ]);
|
||||
|
||||
if (HATED_MERC( pProfile, pSoldier->ubProfile ))
|
||||
@@ -607,7 +607,7 @@ void HandleMoraleEvent( SOLDIERTYPE *pSoldier, INT8 bMoraleEvent, INT16 sMapX, I
|
||||
{
|
||||
if ( SOLDIER_IN_SECTOR( pTeamSoldier, sMapX, sMapY, bMapZ ) )
|
||||
{
|
||||
// mate died in my sector! tactical morale mod
|
||||
// mate died in my sector! tactical morale mod
|
||||
HandleMoraleEventForSoldier( pTeamSoldier, MORALE_SQUADMATE_DIED );
|
||||
}
|
||||
|
||||
@@ -616,7 +616,7 @@ void HandleMoraleEvent( SOLDIERTYPE *pSoldier, INT8 bMoraleEvent, INT16 sMapX, I
|
||||
|
||||
if (BUDDY_MERC( pProfile, pSoldier->ubProfile ))
|
||||
{
|
||||
// oh no! buddy died!
|
||||
// oh no! buddy died!
|
||||
HandleMoraleEventForSoldier( pTeamSoldier, MORALE_BUDDY_DIED );
|
||||
}
|
||||
}
|
||||
@@ -627,7 +627,7 @@ void HandleMoraleEvent( SOLDIERTYPE *pSoldier, INT8 bMoraleEvent, INT16 sMapX, I
|
||||
case MORALE_MERC_MARRIED:
|
||||
// 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++ )
|
||||
{
|
||||
@@ -666,14 +666,14 @@ void HandleMoraleEvent( SOLDIERTYPE *pSoldier, INT8 bMoraleEvent, INT16 sMapX, I
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
||||
default:
|
||||
// debug message
|
||||
ScreenMsg( MSG_FONT_RED, MSG_BETAVERSION, L"Invalid morale event type = %d. AM/CC-1", bMoraleEvent );
|
||||
ScreenMsg( MSG_FONT_RED, MSG_BETAVERSION, L"Invalid morale event type = %d. AM/CC-1", bMoraleEvent );
|
||||
break;
|
||||
}
|
||||
|
||||
@@ -708,11 +708,11 @@ void HandleMoraleEvent( SOLDIERTYPE *pSoldier, INT8 bMoraleEvent, INT16 sMapX, I
|
||||
break;
|
||||
case MORALE_TEAMMATE_DIED:
|
||||
// impact depends on that dude's level of experience
|
||||
ModifyPlayerReputation((UINT8) (pSoldier->bExpLevel * REPUTATION_SOLDIER_DIED));
|
||||
ModifyPlayerReputation((UINT8) (pSoldier->stats.bExpLevel * REPUTATION_SOLDIER_DIED));
|
||||
break;
|
||||
case MORALE_MERC_CAPTURED:
|
||||
// impact depends on that dude's level of experience
|
||||
ModifyPlayerReputation((UINT8) (pSoldier->bExpLevel * REPUTATION_SOLDIER_CAPTURED));
|
||||
ModifyPlayerReputation((UINT8) (pSoldier->stats.bExpLevel * REPUTATION_SOLDIER_CAPTURED));
|
||||
break;
|
||||
case MORALE_KILLED_CIVILIAN:
|
||||
ModifyPlayerReputation(REPUTATION_KILLED_CIVILIAN);
|
||||
@@ -753,12 +753,12 @@ void HourlyMoraleUpdate( void )
|
||||
bLastTeamID = gTacticalStatus.Team[ gbPlayerNum ].bLastID;
|
||||
|
||||
// loop through all mercs to calculate their morale
|
||||
for ( pSoldier = MercPtrs[ bMercID ]; bMercID <= bLastTeamID; bMercID++,pSoldier++)
|
||||
{
|
||||
for ( pSoldier = MercPtrs[ bMercID ]; bMercID <= bLastTeamID; bMercID++,pSoldier++)
|
||||
{
|
||||
//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->fMercAsleep == TRUE ||
|
||||
pSoldier->flags.fMercAsleep == TRUE ||
|
||||
pSoldier->bAssignment == ASSIGNMENT_DEAD ||
|
||||
pSoldier->bAssignment == ASSIGNMENT_POW) )
|
||||
{
|
||||
@@ -791,9 +791,9 @@ void HourlyMoraleUpdate( void )
|
||||
// skip past ourselves and all inactive mercs
|
||||
if (bOtherID != bMercID && pOtherSoldier->bActive && pOtherSoldier->ubProfile != NO_PROFILE &&
|
||||
!(pOtherSoldier->bAssignment == IN_TRANSIT ||
|
||||
pOtherSoldier->fMercAsleep == TRUE ||
|
||||
pOtherSoldier->bAssignment == ASSIGNMENT_DEAD ||
|
||||
pOtherSoldier->bAssignment == ASSIGNMENT_POW))
|
||||
pOtherSoldier->flags.fMercAsleep == TRUE ||
|
||||
pOtherSoldier->bAssignment == ASSIGNMENT_DEAD ||
|
||||
pOtherSoldier->bAssignment == ASSIGNMENT_POW))
|
||||
{
|
||||
if (fSameGroupOnly)
|
||||
{
|
||||
@@ -807,12 +807,12 @@ void HourlyMoraleUpdate( void )
|
||||
{
|
||||
// check to see if the location is the same
|
||||
if (pOtherSoldier->sSectorX != pSoldier->sSectorX ||
|
||||
pOtherSoldier->sSectorY != pSoldier->sSectorY ||
|
||||
pOtherSoldier->sSectorY != pSoldier->sSectorY ||
|
||||
pOtherSoldier->bSectorZ != pSoldier->bSectorZ)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
|
||||
// if the OTHER soldier is in motion then we don't do anything!
|
||||
if (pOtherSoldier->ubGroupID != 0 && PlayerIDGroupInMotion( pOtherSoldier->ubGroupID ))
|
||||
{
|
||||
@@ -830,10 +830,10 @@ void HourlyMoraleUpdate( void )
|
||||
fFoundHated = TRUE;
|
||||
break;
|
||||
}
|
||||
else
|
||||
else
|
||||
{
|
||||
// scale according to how close to we are to snapping
|
||||
//KM : Divide by 0 error found. Wrapped into an if statement.
|
||||
//KM : Divide by 0 error found. Wrapped into an if statement.
|
||||
if( pProfile->bHatedTime[ bHated ] )
|
||||
{
|
||||
bOpinion = ((INT32) bOpinion) * (pProfile->bHatedTime[ bHated ] - pProfile->bHatedCount[ bHated ]) / pProfile->bHatedTime[ bHated ];
|
||||
@@ -841,11 +841,11 @@ void HourlyMoraleUpdate( void )
|
||||
|
||||
if ( pProfile->bHatedCount[ bHated ] <= pProfile->bHatedTime[ bHated ] / 2 )
|
||||
{
|
||||
// Augh, we're teamed with someone we hate! We HATE this!! Ignore everyone else!
|
||||
// Augh, we're teamed with someone we hate! We HATE this!! Ignore everyone else!
|
||||
fFoundHated = TRUE;
|
||||
break;
|
||||
}
|
||||
// otherwise just mix this opinion in with everyone else...
|
||||
// otherwise just mix this opinion in with everyone else...
|
||||
}
|
||||
}
|
||||
iTotalOpinions += bOpinion;
|
||||
@@ -886,7 +886,7 @@ void HourlyMoraleUpdate( void )
|
||||
// shift morale from team by ~10%
|
||||
|
||||
// this should range between -75 and +75
|
||||
bTeamMoraleModDiff = bActualTeamOpinion - pSoldier->bTeamMoraleMod;
|
||||
bTeamMoraleModDiff = bActualTeamOpinion - pSoldier->aiData.bTeamMoraleMod;
|
||||
if (bTeamMoraleModDiff > 0)
|
||||
{
|
||||
bTeamMoraleModChange = 1 + bTeamMoraleModDiff / 10;
|
||||
@@ -899,18 +899,18 @@ void HourlyMoraleUpdate( void )
|
||||
{
|
||||
bTeamMoraleModChange = 0;
|
||||
}
|
||||
pSoldier->bTeamMoraleMod += bTeamMoraleModChange;
|
||||
pSoldier->bTeamMoraleMod = __min( pSoldier->bTeamMoraleMod, MORALE_MOD_MAX );
|
||||
pSoldier->bTeamMoraleMod = __max( pSoldier->bTeamMoraleMod, -MORALE_MOD_MAX );
|
||||
|
||||
pSoldier->aiData.bTeamMoraleMod += bTeamMoraleModChange;
|
||||
pSoldier->aiData.bTeamMoraleMod = __min( pSoldier->aiData.bTeamMoraleMod, MORALE_MOD_MAX );
|
||||
pSoldier->aiData.bTeamMoraleMod = __max( pSoldier->aiData.bTeamMoraleMod, -MORALE_MOD_MAX );
|
||||
|
||||
// New, December 3rd, 1998, by CJC --
|
||||
// If delayed strategic modifier exists then incorporate it in strategic mod
|
||||
if ( pSoldier->bDelayedStrategicMoraleMod )
|
||||
{
|
||||
pSoldier->bStrategicMoraleMod += pSoldier->bDelayedStrategicMoraleMod;
|
||||
pSoldier->aiData.bStrategicMoraleMod += pSoldier->bDelayedStrategicMoraleMod;
|
||||
pSoldier->bDelayedStrategicMoraleMod = 0;
|
||||
pSoldier->bStrategicMoraleMod = __min( pSoldier->bStrategicMoraleMod, MORALE_MOD_MAX );
|
||||
pSoldier->bStrategicMoraleMod = __max( pSoldier->bStrategicMoraleMod, -MORALE_MOD_MAX );
|
||||
pSoldier->aiData.bStrategicMoraleMod = __min( pSoldier->aiData.bStrategicMoraleMod, MORALE_MOD_MAX );
|
||||
pSoldier->aiData.bStrategicMoraleMod = __max( pSoldier->aiData.bStrategicMoraleMod, -MORALE_MOD_MAX );
|
||||
}
|
||||
|
||||
// refresh the morale value for the soldier based on the recalculated team modifier
|
||||
@@ -939,7 +939,7 @@ void DailyMoraleUpdate(SOLDIERTYPE *pSoldier)
|
||||
// CJC: made per hour now
|
||||
/*
|
||||
// decay the merc's strategic morale modifier
|
||||
if (pSoldier->bStrategicMoraleMod != 0)
|
||||
if (pSoldier->aiData.bStrategicMoraleMod != 0)
|
||||
{
|
||||
// decay the modifier!
|
||||
DecayStrategicMorale( pSoldier );
|
||||
@@ -962,10 +962,10 @@ void DailyMoraleUpdate(SOLDIERTYPE *pSoldier)
|
||||
// too low, morale sinks further (merc's in a funk and things aren't getting better)
|
||||
HandleMoraleEvent( pSoldier, MORALE_POOR_MORALE, pSoldier->sSectorX, pSoldier->sSectorY, pSoldier->bSectorZ );
|
||||
}
|
||||
else if ( pSoldier->bMorale >= 75 )
|
||||
else if ( pSoldier->aiData.bMorale >= 75 )
|
||||
{
|
||||
// very high morale, merc is cheerleading others
|
||||
HandleMoraleEvent( pSoldier, MORALE_GREAT_MORALE, pSoldier->sSectorX, pSoldier->sSectorY, pSoldier->bSectorZ );
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user