More buddies/foes (by anv)

- Currently MercProfiles.xml contains 5 records for buddies and 5 for foes + 1 per "learn to", but in code only 2 first + "learn to" are handled. I changed it so all possible buddies and foes can be used, and it's possible to add their specific like/dislike quotes to quote .edts.


git-svn-id: https://ja2svn.mooo.com/source/ja2/trunk/GameSource/ja2_v1.13/Build@6538 3b4a5df2-a311-0410-b5c6-a8a6f20db521
This commit is contained in:
Wanne
2013-10-28 20:02:19 +00:00
parent decc986649
commit 08e6bc4aca
14 changed files with 415 additions and 50 deletions
+77 -3
View File
@@ -102,7 +102,7 @@
#define SIZE_MERC_ADDITIONAL_INFO 160 * 2
#define MERC_ANNOYED_WONT_CONTACT_TIME_MINUTES 6 * 60
#define NUMBER_HATED_MERCS_ONTEAM 3
#define NUMBER_HATED_MERCS_ONTEAM 6
#define STATS_X IMAGE_OFFSET_X + 121
#define STATS_Y IMAGE_OFFSET_Y + 66
@@ -3350,7 +3350,17 @@ BOOLEAN CanMercBeHired()
for(i=0; i< NUMBER_HATED_MERCS_ONTEAM; i++)
{
//see if someone the merc hates is on the team
bMercID = gMercProfiles[ gbCurrentSoldier ].bHated[i];
if( i< NUMBER_HATED_MERCS_ONTEAM - 1 )
{
bMercID = gMercProfiles[ gbCurrentSoldier ].bHated[i];
}
else
{
bMercID = gMercProfiles[ gbCurrentSoldier ].bLearnToHate;
// ignore learn to hate, if he's not a foe yet
if( gMercProfiles[ gbCurrentSoldier ].bLearnToHateCount > 0 )
continue;
}
if( bMercID < 0 )
continue;
@@ -3368,7 +3378,17 @@ BOOLEAN CanMercBeHired()
for(j=0; j< NUMBER_HATED_MERCS_ONTEAM; j++)
{
//if a buddy is on the team, the merc will join
bMercID = gMercProfiles[ gbCurrentSoldier ].bBuddy[j];
if( i< NUMBER_HATED_MERCS_ONTEAM - 1 )
{
bMercID = gMercProfiles[ gbCurrentSoldier ].bBuddy[j];
}
else
{
bMercID = gMercProfiles[ gbCurrentSoldier ].bLearnToLike;
// ignore learn to like, if he's not a buddy yet
if( gMercProfiles[ gbCurrentSoldier ].bLearnToLikeCount > 0 )
continue;
}
if( bMercID < 0 )
continue;
@@ -3383,6 +3403,18 @@ BOOLEAN CanMercBeHired()
{
InitVideoFaceTalking(gbCurrentSoldier, QUOTE_JOINING_CAUSE_BUDDY_2_ON_TEAM);
}
else if(j == 2 )
{
InitVideoFaceTalking(gbCurrentSoldier, QUOTE_JOINING_CAUSE_BUDDY_3_ON_TEAM);
}
else if(j == 3 )
{
InitVideoFaceTalking(gbCurrentSoldier, QUOTE_JOINING_CAUSE_BUDDY_4_ON_TEAM);
}
else if(j == 4 )
{
InitVideoFaceTalking(gbCurrentSoldier, QUOTE_JOINING_CAUSE_BUDDY_5_ON_TEAM);
}
else
{
InitVideoFaceTalking(gbCurrentSoldier, QUOTE_JOINING_CAUSE_LEARNED_TO_LIKE_BUDDY_ON_TEAM);
@@ -3423,6 +3455,48 @@ BOOLEAN CanMercBeHired()
fRetVal = TRUE;
}
}
else if( i == 2)
{
if( gMercProfiles[ gbCurrentSoldier ].bHatedTime[ i ] < 24 )
{
WaitForMercToFinishTalkingOrUserToClick();
InitVideoFaceTalking(gbCurrentSoldier, QUOTE_HATE_MERC_3_ON_TEAM);
fRetVal = FALSE;
}
else
{
InitVideoFaceTalking(gbCurrentSoldier, QUOTE_PERSONALITY_BIAS_WITH_MERC_3);
fRetVal = TRUE;
}
}
else if( i == 3)
{
if( gMercProfiles[ gbCurrentSoldier ].bHatedTime[ i ] < 24 )
{
WaitForMercToFinishTalkingOrUserToClick();
InitVideoFaceTalking(gbCurrentSoldier, QUOTE_HATE_MERC_4_ON_TEAM);
fRetVal = FALSE;
}
else
{
InitVideoFaceTalking(gbCurrentSoldier, QUOTE_PERSONALITY_BIAS_WITH_MERC_4);
fRetVal = TRUE;
}
}
else if( i == 4)
{
if( gMercProfiles[ gbCurrentSoldier ].bHatedTime[ i ] < 24 )
{
WaitForMercToFinishTalkingOrUserToClick();
InitVideoFaceTalking(gbCurrentSoldier, QUOTE_HATE_MERC_5_ON_TEAM);
fRetVal = FALSE;
}
else
{
InitVideoFaceTalking(gbCurrentSoldier, QUOTE_PERSONALITY_BIAS_WITH_MERC_5);
fRetVal = TRUE;
}
}
else
{
WaitForMercToFinishTalkingOrUserToClick();
+26 -5
View File
@@ -510,9 +510,19 @@ BOOLEAN WillMercRenew( SOLDIERTYPE *pSoldier, BOOLEAN fSayQuote )
// find out if the merc has a buddy working for the player
// loop through the list of people the merc considers buddies
for(i=0; i<5; i++)
for(i=0; i<6; i++)
{
bMercID = gMercProfiles[ pSoldier->ubProfile ].bBuddy[i];
if( i<5 )
{
bMercID = gMercProfiles[ pSoldier->ubProfile ].bBuddy[i];
}
else
{
bMercID = gMercProfiles[ pSoldier->ubProfile ].bLearnToLike;
// ignore learn to like, if he's not a buddy yet
if( gMercProfiles[ pSoldier->ubProfile ].bLearnToLikeCount > 0 )
continue;
}
if( bMercID < 0 )
continue;
@@ -526,6 +536,12 @@ BOOLEAN WillMercRenew( SOLDIERTYPE *pSoldier, BOOLEAN fSayQuote )
usBuddyQuote = QUOTE_RENEWING_CAUSE_BUDDY_1_ON_TEAM;
else if( i == 1 )
usBuddyQuote = QUOTE_RENEWING_CAUSE_BUDDY_2_ON_TEAM;
else if( i == 2 )
usBuddyQuote = QUOTE_RENEWING_CAUSE_BUDDY_3_ON_TEAM;
else if( i == 3 )
usBuddyQuote = QUOTE_RENEWING_CAUSE_BUDDY_4_ON_TEAM;
else if( i == 4 )
usBuddyQuote = QUOTE_RENEWING_CAUSE_BUDDY_5_ON_TEAM;
else
usBuddyQuote = QUOTE_RENEWING_CAUSE_LEARNED_TO_LIKE_BUDDY_ON_TEAM;
@@ -541,7 +557,7 @@ BOOLEAN WillMercRenew( SOLDIERTYPE *pSoldier, BOOLEAN fSayQuote )
// see if someone the merc hates is on the team
// loop through the list of people the merc hates
for(i=0; i<2; i++)
for(i=0; i<5; i++)
{
bMercID = gMercProfiles[ pSoldier->ubProfile ].bHated[ i ];
@@ -570,9 +586,14 @@ BOOLEAN WillMercRenew( SOLDIERTYPE *pSoldier, BOOLEAN fSayQuote )
{
if( i == 0 )
usReasonQuote = QUOTE_HATE_MERC_1_ON_TEAM_WONT_RENEW;
else
else if( i == 1 )
usReasonQuote = QUOTE_HATE_MERC_2_ON_TEAM_WONT_RENEW;
else if( i == 2 )
usReasonQuote = QUOTE_HATE_MERC_3_ON_TEAM_WONT_RENEW;
else if( i == 3 )
usReasonQuote = QUOTE_HATE_MERC_4_ON_TEAM_WONT_RENEW;
else if( i == 4 )
usReasonQuote = QUOTE_HATE_MERC_5_ON_TEAM_WONT_RENEW;
// use first hated in case there are multiple
break;
}
+89 -9
View File
@@ -954,12 +954,15 @@ void UpdateBuddyAndHatedCounters( void )
ubOtherProfileID = pOtherSoldier->ubProfile;
for ( iLoop = 0; iLoop < 4; iLoop++ )
for ( iLoop = 0; iLoop < 7; iLoop++ )
{
switch( iLoop )
{
case 0:
case 1:
case 2:
case 3:
case 4:
if (pProfile->bHated[iLoop] == ubOtherProfileID)
{
// arrgs, we're on assignment with the person we loathe!
@@ -978,10 +981,31 @@ void UpdateBuddyAndHatedCounters( void )
{
TacticalCharacterDialogue( pSoldier, QUOTE_HATED_MERC_ONE );
}
else
else if (iLoop == 1)
{
TacticalCharacterDialogue( pSoldier, QUOTE_HATED_MERC_TWO );
}
else if (iLoop == 2)
{
if( pSoldier->ubWhatKindOfMercAmI == MERC_TYPE__AIM_MERC )
TacticalCharacterDialogue( pSoldier, QUOTE_AIM_HATED_MERC_THREE );
else
TacticalCharacterDialogue( pSoldier, QUOTE_NON_AIM_HATED_MERC_THREE );
}
else if (iLoop == 3)
{
if( pSoldier->ubWhatKindOfMercAmI == MERC_TYPE__AIM_MERC )
TacticalCharacterDialogue( pSoldier, QUOTE_AIM_HATED_MERC_FOUR );
else
TacticalCharacterDialogue( pSoldier, QUOTE_NON_AIM_HATED_MERC_FOUR );
}
else if (iLoop == 4)
{
if( pSoldier->ubWhatKindOfMercAmI == MERC_TYPE__AIM_MERC )
TacticalCharacterDialogue( pSoldier, QUOTE_AIM_HATED_MERC_FIVE );
else
TacticalCharacterDialogue( pSoldier, QUOTE_NON_AIM_HATED_MERC_FIVE );
}
StopTimeCompression();
}
else if ( pProfile->bHatedCount[iLoop] == 0 )
@@ -994,10 +1018,22 @@ void UpdateBuddyAndHatedCounters( void )
{
TacticalCharacterDialogue( pSoldier, QUOTE_MERC_QUIT_HATED1 );
}
else
else if (iLoop == 1)
{
TacticalCharacterDialogue( pSoldier, QUOTE_MERC_QUIT_HATED2 );
}
else if (iLoop == 2)
{
TacticalCharacterDialogue( pSoldier, QUOTE_MERC_QUIT_HATED3 );
}
else if (iLoop == 3)
{
TacticalCharacterDialogue( pSoldier, QUOTE_MERC_QUIT_HATED4 );
}
else if (iLoop == 4)
{
TacticalCharacterDialogue( pSoldier, QUOTE_MERC_QUIT_HATED5 );
}
// Leave now! ( handle equipment too )....
TacticalCharacterDialogueWithSpecialEvent( pSoldier, 0, DIALOGUE_SPECIAL_EVENT_CONTRACT_ENDING, 0,0 );
@@ -1011,10 +1047,31 @@ void UpdateBuddyAndHatedCounters( void )
{
TacticalCharacterDialogue( pSoldier, QUOTE_HATED_MERC_ONE );
}
else
else if (iLoop == 1)
{
TacticalCharacterDialogue( pSoldier, QUOTE_HATED_MERC_TWO );
}
else if (iLoop == 2)
{
if( pSoldier->ubWhatKindOfMercAmI == MERC_TYPE__AIM_MERC )
TacticalCharacterDialogue( pSoldier, QUOTE_AIM_HATED_MERC_THREE );
else
TacticalCharacterDialogue( pSoldier, QUOTE_NON_AIM_HATED_MERC_THREE );
}
else if (iLoop == 3)
{
if( pSoldier->ubWhatKindOfMercAmI == MERC_TYPE__AIM_MERC )
TacticalCharacterDialogue( pSoldier, QUOTE_AIM_HATED_MERC_FOUR );
else
TacticalCharacterDialogue( pSoldier, QUOTE_NON_AIM_HATED_MERC_FOUR );
}
else if (iLoop == 4)
{
if( pSoldier->ubWhatKindOfMercAmI == MERC_TYPE__AIM_MERC )
TacticalCharacterDialogue( pSoldier, QUOTE_AIM_HATED_MERC_FIVE );
else
TacticalCharacterDialogue( pSoldier, QUOTE_NON_AIM_HATED_MERC_FIVE );
}
pProfile->ubTimeTillNextHatedComplaint = TIME_BETWEEN_HATED_COMPLAINTS - 1;
}
}
@@ -1043,15 +1100,36 @@ void UpdateBuddyAndHatedCounters( void )
{
TacticalCharacterDialogue( pSoldier, QUOTE_HATED_MERC_ONE );
}
else
else if (iLoop == 1)
{
TacticalCharacterDialogue( pSoldier, QUOTE_HATED_MERC_TWO );
}
else if (iLoop == 2)
{
if( pSoldier->ubWhatKindOfMercAmI == MERC_TYPE__AIM_MERC )
TacticalCharacterDialogue( pSoldier, QUOTE_AIM_HATED_MERC_THREE );
else
TacticalCharacterDialogue( pSoldier, QUOTE_NON_AIM_HATED_MERC_THREE );
}
else if (iLoop == 3)
{
if( pSoldier->ubWhatKindOfMercAmI == MERC_TYPE__AIM_MERC )
TacticalCharacterDialogue( pSoldier, QUOTE_AIM_HATED_MERC_FOUR );
else
TacticalCharacterDialogue( pSoldier, QUOTE_NON_AIM_HATED_MERC_FOUR );
}
else if (iLoop == 4)
{
if( pSoldier->ubWhatKindOfMercAmI == MERC_TYPE__AIM_MERC )
TacticalCharacterDialogue( pSoldier, QUOTE_AIM_HATED_MERC_FIVE );
else
TacticalCharacterDialogue( pSoldier, QUOTE_NON_AIM_HATED_MERC_FIVE );
}
}
}
}
break;
case 2:
case 5:
if (pProfile->bLearnToHate == ubOtherProfileID)
{
if ( pProfile->bLearnToHateCount > 0 )
@@ -1071,8 +1149,9 @@ void UpdateBuddyAndHatedCounters( void )
else if (pProfile->bLearnToHateCount == 0)
{
// set as bHated[2];
// anv: nope, we don't want to overwrite possible standard foe, instead added extra check to WhichHated(), CanMercBeHired()
if (OKToCheckOpinion(ubOtherProfileID)) {
pProfile->bHated[2] = pProfile->bLearnToHate;
//pProfile->bHated[2] = pProfile->bLearnToHate;
pProfile->bMercOpinion[ubOtherProfileID] = HATED_OPINION;
}
#ifdef JA2UB
@@ -1125,15 +1204,16 @@ void UpdateBuddyAndHatedCounters( void )
}
}
break;
case 3:
case 6:
if (pProfile->bLearnToLikeCount > 0 && pProfile->bLearnToLike == ubOtherProfileID)
{
pProfile->bLearnToLikeCount--;
if (pProfile->bLearnToLikeCount == 0)
{
// add to liked!
// anv: nope, we don't want to overwrite possible standard buddy, instead added extra check to WhichBuddy(), DoesMercHaveABuddyOnTheTeam(), CanMercBeHired()
if (OKToCheckOpinion(ubOtherProfileID)) {
pProfile->bBuddy[2] = pProfile->bLearnToLike;
//pProfile->bBuddy[2] = pProfile->bLearnToLike;
pProfile->bMercOpinion[ubOtherProfileID] = BUDDY_OPINION;
}
}
+21
View File
@@ -122,6 +122,27 @@ void HandleSoldierDeadComments( SOLDIERTYPE *pSoldier )
TacticalCharacterDialogue( pTeamSoldier, QUOTE_BUDDY_TWO_KILLED );
break;
case 2:
// buddy #3 died!
if( pTeamSoldier->ubWhatKindOfMercAmI == MERC_TYPE__AIM_MERC )
TacticalCharacterDialogue( pTeamSoldier, QUOTE_AIM_BUDDY_THREE_KILLED );
else
TacticalCharacterDialogue( pTeamSoldier, QUOTE_NON_AIM_BUDDY_THREE_KILLED );
break;
case 3:
// buddy #4 died!
if( pTeamSoldier->ubWhatKindOfMercAmI == MERC_TYPE__AIM_MERC )
TacticalCharacterDialogue( pTeamSoldier, QUOTE_AIM_BUDDY_FOUR_KILLED );
else
TacticalCharacterDialogue( pTeamSoldier, QUOTE_NON_AIM_BUDDY_FOUR_KILLED );
break;
case 4:
// buddy #5 died!
if( pTeamSoldier->ubWhatKindOfMercAmI == MERC_TYPE__AIM_MERC )
TacticalCharacterDialogue( pTeamSoldier, QUOTE_AIM_BUDDY_FIVE_KILLED );
else
TacticalCharacterDialogue( pTeamSoldier, QUOTE_NON_AIM_BUDDY_FIVE_KILLED );
break;
case 5:
// learn to like buddy died!
TacticalCharacterDialogue( pTeamSoldier, QUOTE_LEARNED_TO_LIKE_MERC_KILLED );
break;
+62 -16
View File
@@ -120,26 +120,38 @@ enum DialogQuoteIDs
QUOTE_SPARE2,
//80
QUOTE_REPUTATION_REFUSAL,
QUOTE_DEATH_RATE_REFUSAL, //= 99,
QUOTE_REPUTATION_REFUSAL, //80
QUOTE_NON_AIM_BUDDY_THREE_KILLED = QUOTE_REPUTATION_REFUSAL,
QUOTE_DEATH_RATE_REFUSAL, //= 81,
QUOTE_NON_AIM_BUDDY_FOUR_KILLED = QUOTE_DEATH_RATE_REFUSAL,
QUOTE_LAME_REFUSAL, //= 82,
QUOTE_WONT_RENEW_CONTRACT_LAME_REFUSAL, // ARM: now unused
QUOTE_ANSWERING_MACHINE_MSG,
QUOTE_DEPARTING_COMMENT_CONTRACT_NOT_RENEWED_OR_48_OR_MORE,
QUOTE_HATE_MERC_1_ON_TEAM,// = 100,
QUOTE_HATE_MERC_2_ON_TEAM,// = 101,
QUOTE_LEARNED_TO_HATE_MERC_ON_TEAM,// = 102,
QUOTE_NON_AIM_BUDDY_FIVE_KILLED = QUOTE_LAME_REFUSAL,
QUOTE_WONT_RENEW_CONTRACT_LAME_REFUSAL, //=83,
QUOTE_NON_AIM_HATED_MERC_THREE = QUOTE_WONT_RENEW_CONTRACT_LAME_REFUSAL,
QUOTE_ANSWERING_MACHINE_MSG, //= 84,
QUOTE_NON_AIM_HATED_MERC_FOUR = QUOTE_ANSWERING_MACHINE_MSG,
QUOTE_DEPARTING_COMMENT_CONTRACT_NOT_RENEWED_OR_48_OR_MORE, //=85,
QUOTE_NON_AIM_HATED_MERC_FIVE = QUOTE_DEPARTING_COMMENT_CONTRACT_NOT_RENEWED_OR_48_OR_MORE,
QUOTE_HATE_MERC_1_ON_TEAM,// = 86,
QUOTE_NON_AIM_BUDDY_3_GOOD = QUOTE_HATE_MERC_1_ON_TEAM,
QUOTE_HATE_MERC_2_ON_TEAM,// = 87,
QUOTE_NON_AIM_BUDDY_4_GOOD = QUOTE_HATE_MERC_2_ON_TEAM,
QUOTE_LEARNED_TO_HATE_MERC_ON_TEAM,// = 88,
QUOTE_NON_AIM_BUDDY_5_GOOD = QUOTE_LEARNED_TO_HATE_MERC_ON_TEAM,
QUOTE_CONTRACTS_OVER,// = 89,
QUOTE_MERC_QUIT_HATED3 = QUOTE_CONTRACTS_OVER,
//90
QUOTE_ACCEPT_CONTRACT_RENEWAL,
QUOTE_CONTRACT_ACCEPTANCE,
QUOTE_JOINING_CAUSE_BUDDY_1_ON_TEAM,// = 103,
QUOTE_JOINING_CAUSE_BUDDY_2_ON_TEAM,// = 104,
QUOTE_JOINING_CAUSE_LEARNED_TO_LIKE_BUDDY_ON_TEAM,// = 105,
QUOTE_ACCEPT_CONTRACT_RENEWAL, // =90,
QUOTE_MERC_QUIT_HATED4 = QUOTE_ACCEPT_CONTRACT_RENEWAL,
QUOTE_CONTRACT_ACCEPTANCE,// =91,
QUOTE_MERC_QUIT_HATED5 = QUOTE_CONTRACT_ACCEPTANCE,
QUOTE_JOINING_CAUSE_BUDDY_1_ON_TEAM,// = 92,
QUOTE_JOINING_CAUSE_BUDDY_2_ON_TEAM,// = 93,
QUOTE_JOINING_CAUSE_LEARNED_TO_LIKE_BUDDY_ON_TEAM,// = 94,
QUOTE_REFUSAL_RENEW_DUE_TO_MORALE,// = 95,
QUOTE_PRECEDENT_TO_REPEATING_ONESELF,// = 106,
QUOTE_REFUSAL_TO_JOIN_LACK_OF_FUNDS,// = 107,
QUOTE_PRECEDENT_TO_REPEATING_ONESELF,// = 96,
QUOTE_REFUSAL_TO_JOIN_LACK_OF_FUNDS,// = 97,
QUOTE_DEPART_COMMET_CONTRACT_NOT_RENEWED_OR_TERMINATED_UNDER_48,// = 98,
QUOTE_DEATH_RATE_RENEWAL,
@@ -168,6 +180,40 @@ enum DialogQuoteIDs
QUOTE_ENTER_SECTOR_WITH_FAN_2,
#endif
QUOTE_AIM_BUDDY_THREE_KILLED = 119,
//120
QUOTE_AIM_BUDDY_FOUR_KILLED,
QUOTE_AIM_BUDDY_FIVE_KILLED,
QUOTE_AIM_HATED_MERC_THREE,
QUOTE_AIM_HATED_MERC_FOUR,
QUOTE_AIM_HATED_MERC_FIVE,
QUOTE_HATED_3_ARRIVES,
QUOTE_HATED_4_ARRIVES,
QUOTE_HATED_5_ARRIVES,
QUOTE_AIM_BUDDY_3_GOOD,
QUOTE_AIM_BUDDY_4_GOOD,
//130
QUOTE_AIM_BUDDY_5_GOOD,
QUOTE_HATE_MERC_3_ON_TEAM,
QUOTE_HATE_MERC_4_ON_TEAM,
QUOTE_HATE_MERC_5_ON_TEAM,
QUOTE_JOINING_CAUSE_BUDDY_3_ON_TEAM,
QUOTE_JOINING_CAUSE_BUDDY_4_ON_TEAM,
QUOTE_JOINING_CAUSE_BUDDY_5_ON_TEAM,
QUOTE_HATE_MERC_3_ON_TEAM_WONT_RENEW,
QUOTE_HATE_MERC_4_ON_TEAM_WONT_RENEW,
QUOTE_HATE_MERC_5_ON_TEAM_WONT_RENEW,
//140
QUOTE_RENEWING_CAUSE_BUDDY_3_ON_TEAM,
QUOTE_RENEWING_CAUSE_BUDDY_4_ON_TEAM,
QUOTE_RENEWING_CAUSE_BUDDY_5_ON_TEAM,
QUOTE_PERSONALITY_BIAS_WITH_MERC_3,
QUOTE_PERSONALITY_BIAS_WITH_MERC_4,
QUOTE_PERSONALITY_BIAS_WITH_MERC_5,
} ;
+9
View File
@@ -716,6 +716,15 @@ void HandleMercArrivesQuotes( SOLDIERTYPE *pSoldier )
case 1:
TacticalCharacterDialogue( pTeamSoldier, QUOTE_HATED_2_ARRIVES );
break;
case 2:
TacticalCharacterDialogue( pTeamSoldier, QUOTE_HATED_3_ARRIVES );
break;
case 3:
TacticalCharacterDialogue( pTeamSoldier, QUOTE_HATED_4_ARRIVES );
break;
case 4:
TacticalCharacterDialogue( pTeamSoldier, QUOTE_HATED_5_ARRIVES );
break;
default:
break;
}
+1 -1
View File
@@ -1244,7 +1244,7 @@ void HourlyMoraleUpdate( void )
if (bOpinion == HATED_OPINION)
{
bHated = WhichHated( pSoldier->ubProfile, pOtherSoldier->ubProfile );
if ( bHated >= 2 )
if ( bHated >= 5 )
{
// learn to hate which has become full-blown hatred, full strength
fFoundHated = TRUE;
+31 -7
View File
@@ -3371,13 +3371,34 @@ void HandlePlayerTeamMemberDeath( SOLDIERTYPE *pSoldier )
// buddy #2 died!
TacticalCharacterDialogue( pTeamSoldier, QUOTE_BUDDY_TWO_KILLED );
break;
case 2:
// learn to like buddy died!
TacticalCharacterDialogue( pTeamSoldier, QUOTE_LEARNED_TO_LIKE_MERC_KILLED );
break;
default:
break;
}
case 2:
// buddy #3 died!
if( pTeamSoldier->ubWhatKindOfMercAmI == MERC_TYPE__AIM_MERC )
TacticalCharacterDialogue( pTeamSoldier, QUOTE_AIM_BUDDY_THREE_KILLED );
else
TacticalCharacterDialogue( pTeamSoldier, QUOTE_NON_AIM_BUDDY_THREE_KILLED );
break;
case 3:
// buddy #4 died!
if( pTeamSoldier->ubWhatKindOfMercAmI == MERC_TYPE__AIM_MERC )
TacticalCharacterDialogue( pTeamSoldier, QUOTE_AIM_BUDDY_FOUR_KILLED );
else
TacticalCharacterDialogue( pTeamSoldier, QUOTE_NON_AIM_BUDDY_FOUR_KILLED );
break;
case 4:
// buddy #5 died!
if( pTeamSoldier->ubWhatKindOfMercAmI == MERC_TYPE__AIM_MERC )
TacticalCharacterDialogue( pTeamSoldier, QUOTE_AIM_BUDDY_FIVE_KILLED );
else
TacticalCharacterDialogue( pTeamSoldier, QUOTE_NON_AIM_BUDDY_FIVE_KILLED );
break;
case 5:
// learn to like buddy died!
TacticalCharacterDialogue( pTeamSoldier, QUOTE_LEARNED_TO_LIKE_MERC_KILLED );
break;
default:
break;
}
#ifdef JA2UB
#else
// anv: handle Speck witnessing his employee death
@@ -7075,6 +7096,9 @@ BOOLEAN CheckForEndOfBattle( BOOLEAN fAnEnemyRetreated )
pTeamSoldier->usQuoteSaidExtFlags &= (~SOLDIER_QUOTE_SAID_BUDDY_1_WITNESSED);
pTeamSoldier->usQuoteSaidExtFlags &= (~SOLDIER_QUOTE_SAID_BUDDY_2_WITNESSED);
pTeamSoldier->usQuoteSaidExtFlags &= (~SOLDIER_QUOTE_SAID_BUDDY_3_WITNESSED);
pTeamSoldier->usQuoteSaidExtFlags &= (~SOLDIER_QUOTE_SAID_BUDDY_4_WITNESSED);
pTeamSoldier->usQuoteSaidExtFlags &= (~SOLDIER_QUOTE_SAID_BUDDY_5_WITNESSED);
pTeamSoldier->usQuoteSaidExtFlags &= (~SOLDIER_QUOTE_SAID_BUDDY_6_WITNESSED);
// toggle stealth mode....
gfUIStanceDifferent = TRUE;
+21
View File
@@ -840,6 +840,27 @@ INT32 SkillCheck( SOLDIERTYPE * pSoldier, INT8 bReason, INT8 bChanceMod )
TacticalCharacterDialogue( pTeamSoldier, QUOTE_BUDDY_2_GOOD );
break;
case 2:
// buddy #3 did something good!
if( pTeamSoldier->ubWhatKindOfMercAmI == MERC_TYPE__AIM_MERC )
TacticalCharacterDialogue( pTeamSoldier, QUOTE_AIM_BUDDY_3_GOOD );
else
TacticalCharacterDialogue( pTeamSoldier, QUOTE_NON_AIM_BUDDY_3_GOOD );
break;
case 3:
// buddy #4 did something good!
if( pTeamSoldier->ubWhatKindOfMercAmI == MERC_TYPE__AIM_MERC )
TacticalCharacterDialogue( pTeamSoldier, QUOTE_AIM_BUDDY_4_GOOD );
else
TacticalCharacterDialogue( pTeamSoldier, QUOTE_NON_AIM_BUDDY_4_GOOD );
break;
case 4:
// buddy #5 did something good!
if( pTeamSoldier->ubWhatKindOfMercAmI == MERC_TYPE__AIM_MERC )
TacticalCharacterDialogue( pTeamSoldier, QUOTE_AIM_BUDDY_5_GOOD );
else
TacticalCharacterDialogue( pTeamSoldier, QUOTE_NON_AIM_BUDDY_5_GOOD );
break;
case 5:
// learn to like buddy did something good!
TacticalCharacterDialogue( pTeamSoldier, QUOTE_LEARNED_TO_LIKE_WITNESSED );
break;
+47 -2
View File
@@ -3457,6 +3457,27 @@ void SayBuddyWitnessedQuoteFromKill( SOLDIERTYPE *pKillerSoldier, INT32 sGridNo,
continue;
}
break;
case 3:
if ( pTeamSoldier->usQuoteSaidExtFlags & SOLDIER_QUOTE_SAID_BUDDY_4_WITNESSED )
{
continue;
}
break;
case 4:
if ( pTeamSoldier->usQuoteSaidExtFlags & SOLDIER_QUOTE_SAID_BUDDY_5_WITNESSED )
{
continue;
}
break;
case 5:
if ( pTeamSoldier->usQuoteSaidExtFlags & SOLDIER_QUOTE_SAID_BUDDY_6_WITNESSED )
{
continue;
}
break;
}
// TO LOS check to killed
@@ -3502,9 +3523,33 @@ void SayBuddyWitnessedQuoteFromKill( SOLDIERTYPE *pKillerSoldier, INT32 sGridNo,
break;
case 2:
usQuoteNum = QUOTE_LEARNED_TO_LIKE_WITNESSED;
if( MercPtrs[ ubMercsInSector[ ubChosenMerc ] ]->ubWhatKindOfMercAmI == MERC_TYPE__AIM_MERC )
usQuoteNum = QUOTE_AIM_BUDDY_3_GOOD;
else
usQuoteNum = QUOTE_NON_AIM_BUDDY_3_GOOD;
MercPtrs[ ubMercsInSector[ ubChosenMerc ] ]->usQuoteSaidExtFlags |= SOLDIER_QUOTE_SAID_BUDDY_3_WITNESSED;
break;
case 3:
if( MercPtrs[ ubMercsInSector[ ubChosenMerc ] ]->ubWhatKindOfMercAmI == MERC_TYPE__AIM_MERC )
usQuoteNum = QUOTE_AIM_BUDDY_4_GOOD;
else
usQuoteNum = QUOTE_NON_AIM_BUDDY_4_GOOD;
MercPtrs[ ubMercsInSector[ ubChosenMerc ] ]->usQuoteSaidExtFlags |= SOLDIER_QUOTE_SAID_BUDDY_4_WITNESSED;
break;
case 4:
if( MercPtrs[ ubMercsInSector[ ubChosenMerc ] ]->ubWhatKindOfMercAmI == MERC_TYPE__AIM_MERC )
usQuoteNum = QUOTE_AIM_BUDDY_5_GOOD;
else
usQuoteNum = QUOTE_NON_AIM_BUDDY_5_GOOD;
MercPtrs[ ubMercsInSector[ ubChosenMerc ] ]->usQuoteSaidExtFlags |= SOLDIER_QUOTE_SAID_BUDDY_5_WITNESSED;
break;
case 5:
usQuoteNum = QUOTE_LEARNED_TO_LIKE_WITNESSED;
MercPtrs[ ubMercsInSector[ ubChosenMerc ] ]->usQuoteSaidExtFlags |= SOLDIER_QUOTE_SAID_BUDDY_6_WITNESSED;
break;
}
TacticalCharacterDialogue( MercPtrs[ ubMercsInSector[ ubChosenMerc ] ], usQuoteNum );
}
@@ -3529,7 +3574,7 @@ void HandleKilledQuote( SOLDIERTYPE *pKilledSoldier, SOLDIERTYPE *pKillerSoldier
BOOLEAN fCanWeSeeLocation = ( SoldierTo3DLocationLineOfSightTest( pKillerSoldier, sGridNo, bLevel, 3, TRUE, CALC_FROM_ALL_DIRS ) != 0 );
// Are we killing mike?
if ( pKilledSoldier->ubProfile == MIKE && pKillerSoldier->ubWhatKindOfMercAmI == MERC_TYPE__AIM_MERC )
if ( pKilledSoldier->ubProfile == MIKE && ( pKillerSoldier->ubWhatKindOfMercAmI == MERC_TYPE__AIM_MERC || ( pKillerSoldier->ubWhatKindOfMercAmI == MERC_TYPE__MERC && gMercProfiles[pKillerSoldier->ubProfile].bLearnToHate == 255 ) ) )
{
// Can we see?
if ( fCanWeSeeLocation )
+3
View File
@@ -152,6 +152,9 @@ INT8 NUM_SKILL_TRAITS( SOLDIERTYPE * pSoldier, UINT8 uiSkillTraitNumber );
#define SOLDIER_QUOTE_SAID_BUDDY_1_WITNESSED 0x0040
#define SOLDIER_QUOTE_SAID_BUDDY_2_WITNESSED 0x0080
#define SOLDIER_QUOTE_SAID_BUDDY_3_WITNESSED 0x0100
#define SOLDIER_QUOTE_SAID_BUDDY_4_WITNESSED 0x0400
#define SOLDIER_QUOTE_SAID_BUDDY_5_WITNESSED 0x0800
#define SOLDIER_QUOTE_SAID_BUDDY_6_WITNESSED 0x1000
#ifdef JA2UB
#define SOLDIER_QUOTE_SAID_THOUGHT_KILLED_YOU 0x0200
+25 -4
View File
@@ -834,6 +834,9 @@ BOOLEAN LoadMercProfiles(void)
// ARM: this is also being done inside the profile editor, but put it here too, so this project's code makes sense
gMercProfiles[ uiLoop ].bHatedCount[0] = gMercProfiles[ uiLoop ].bHatedTime[0];
gMercProfiles[ uiLoop ].bHatedCount[1] = gMercProfiles[ uiLoop ].bHatedTime[1];
gMercProfiles[ uiLoop ].bHatedCount[2] = gMercProfiles[ uiLoop ].bHatedTime[2];
gMercProfiles[ uiLoop ].bHatedCount[3] = gMercProfiles[ uiLoop ].bHatedTime[3];
gMercProfiles[ uiLoop ].bHatedCount[4] = gMercProfiles[ uiLoop ].bHatedTime[4];
gMercProfiles[ uiLoop ].bLearnToHateCount = gMercProfiles[ uiLoop ].bLearnToHateTime;
gMercProfiles[ uiLoop ].bLearnToLikeCount = gMercProfiles[ uiLoop ].bLearnToLikeTime;
@@ -2034,13 +2037,17 @@ INT8 WhichBuddy( UINT8 ubCharNum, UINT8 ubBuddy )
pProfile = &( gMercProfiles[ ubCharNum ] );
for (bLoop = 0; bLoop < 3; bLoop++)
for (bLoop = 0; bLoop < 5; bLoop++)
{
if ( pProfile->bBuddy[bLoop] == ubBuddy )
{
return( bLoop );
}
}
if( pProfile->bLearnToLike == ubBuddy && pProfile->bLearnToLikeCount == 0 )
{
return( 5 );
}
return( -1 );
}
@@ -2051,13 +2058,17 @@ INT8 WhichHated( UINT8 ubCharNum, UINT8 ubHated )
pProfile = &( gMercProfiles[ ubCharNum ] );
for (bLoop = 0; bLoop < 3; bLoop++)
for (bLoop = 0; bLoop < 5; bLoop++)
{
if ( pProfile->bHated[bLoop] == ubHated )
{
return( bLoop );
}
}
if( pProfile->bLearnToHate == ubHated && pProfile->bLearnToHateCount == 0 )
{
return( 5 );
}
return( -1 );
}
@@ -2161,10 +2172,20 @@ BOOLEAN DoesMercHaveABuddyOnTheTeam( UINT8 ubMercID )
UINT8 bBuddyID;
// loop through the list of people the merc is buddies with
for(ubCnt=0; ubCnt< 3; ubCnt++)
for(ubCnt=0; ubCnt< 6; ubCnt++)
{
//see if the merc has a buddy on the team
bBuddyID = gMercProfiles[ ubMercID ].bBuddy[ubCnt];
if( ubCnt<5 )
{
bBuddyID = gMercProfiles[ ubMercID ].bBuddy[ubCnt];
}
else
{
bBuddyID = gMercProfiles[ ubMercID ].bLearnToLike;
// ignore learn to like, if he's not a buddy yet
if( gMercProfiles[ ubMercID ].bLearnToLikeCount > 0 )
continue;
}
//If its not a valid 'buddy'
if( bBuddyID < 0 )
+1 -1
View File
@@ -2439,7 +2439,7 @@ void ManSeesMan(SOLDIERTYPE *pSoldier, SOLDIERTYPE *pOpponent, INT32 sOppGridNo,
gfMorrisShouldSayHi = TRUE;
}
#else
if ( (pOpponent->ubProfile == MIKE) && ( pSoldier->ubWhatKindOfMercAmI == MERC_TYPE__AIM_MERC ) && !(pSoldier->usQuoteSaidExtFlags & SOLDIER_QUOTE_SAID_EXT_MIKE) )
if ( (pOpponent->ubProfile == MIKE) && ( pSoldier->ubWhatKindOfMercAmI == MERC_TYPE__AIM_MERC || pSoldier->ubWhatKindOfMercAmI == MERC_TYPE__MERC ) && !(pSoldier->usQuoteSaidExtFlags & SOLDIER_QUOTE_SAID_EXT_MIKE) )
{
if (gfMikeShouldSayHi == FALSE)
{
+2 -2
View File
@@ -364,8 +364,8 @@ typedef enum
ONEQUARTER_EVOLUTION,
} CharacterEvolution;
#define BUDDY_MERC( prof, bud ) ((prof)->bBuddy[0] == (bud) || (prof)->bBuddy[1] == (bud) || (prof)->bBuddy[2] == (bud) )
#define HATED_MERC( prof, hat ) ((prof)->bHated[0] == (hat) || (prof)->bHated[1] == (hat) || (prof)->bHated[2] == (hat) )
#define BUDDY_MERC( prof, bud ) ((prof)->bBuddy[0] == (bud) || (prof)->bBuddy[1] == (bud) || (prof)->bBuddy[2] == (bud) || (prof)->bBuddy[3] == (bud) || (prof)->bBuddy[4] == (bud) || ( (prof)->bLearnToLike == (bud) && (prof)->bLearnToLikeCount == 0 ) )
#define HATED_MERC( prof, hat ) ((prof)->bHated[0] == (hat) || (prof)->bHated[1] == (hat) || (prof)->bHated[2] == (hat) || (prof)->bHated[3] == (hat) || (prof)->bHated[4] == (hat) || ( (prof)->bLearnToHate == (hat) && (prof)->bLearnToHateCount == 0 ) )
#define BUDDY_OPINION +25
#define HATED_OPINION -25