From 08e6bc4aca393ddb74e276cbdb7c7893eabfc083 Mon Sep 17 00:00:00 2001 From: Wanne Date: Mon, 28 Oct 2013 20:02:19 +0000 Subject: [PATCH] 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 --- Laptop/AimMembers.cpp | 80 ++++++++++++++++++++++- Strategic/Merc Contract.cpp | 31 +++++++-- Strategic/Strategic Merc Handler.cpp | 98 +++++++++++++++++++++++++--- Strategic/strategic.cpp | 21 ++++++ Tactical/Dialogue Control.h | 78 +++++++++++++++++----- Tactical/Merc Hiring.cpp | 9 +++ Tactical/Morale.cpp | 2 +- Tactical/Overhead.cpp | 38 +++++++++-- Tactical/SkillCheck.cpp | 21 ++++++ Tactical/Soldier Ani.cpp | 49 +++++++++++++- Tactical/Soldier Control.h | 3 + Tactical/Soldier Profile.cpp | 29 ++++++-- Tactical/opplist.cpp | 2 +- Tactical/soldier profile type.h | 4 +- 14 files changed, 415 insertions(+), 50 deletions(-) diff --git a/Laptop/AimMembers.cpp b/Laptop/AimMembers.cpp index 32edab8a..8f310b09 100644 --- a/Laptop/AimMembers.cpp +++ b/Laptop/AimMembers.cpp @@ -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(); diff --git a/Strategic/Merc Contract.cpp b/Strategic/Merc Contract.cpp index ac155983..9860e511 100644 --- a/Strategic/Merc Contract.cpp +++ b/Strategic/Merc Contract.cpp @@ -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; } diff --git a/Strategic/Strategic Merc Handler.cpp b/Strategic/Strategic Merc Handler.cpp index fcf30f93..7c288e59 100644 --- a/Strategic/Strategic Merc Handler.cpp +++ b/Strategic/Strategic Merc Handler.cpp @@ -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; } } diff --git a/Strategic/strategic.cpp b/Strategic/strategic.cpp index bf24b2c4..30ed50b4 100644 --- a/Strategic/strategic.cpp +++ b/Strategic/strategic.cpp @@ -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; diff --git a/Tactical/Dialogue Control.h b/Tactical/Dialogue Control.h index c9992e03..62cce999 100644 --- a/Tactical/Dialogue Control.h +++ b/Tactical/Dialogue Control.h @@ -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, + } ; diff --git a/Tactical/Merc Hiring.cpp b/Tactical/Merc Hiring.cpp index 3e8ca665..98bb09db 100644 --- a/Tactical/Merc Hiring.cpp +++ b/Tactical/Merc Hiring.cpp @@ -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; } diff --git a/Tactical/Morale.cpp b/Tactical/Morale.cpp index a746cac1..3ff650d9 100644 --- a/Tactical/Morale.cpp +++ b/Tactical/Morale.cpp @@ -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; diff --git a/Tactical/Overhead.cpp b/Tactical/Overhead.cpp index 2275db06..00b6be9f 100644 --- a/Tactical/Overhead.cpp +++ b/Tactical/Overhead.cpp @@ -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; diff --git a/Tactical/SkillCheck.cpp b/Tactical/SkillCheck.cpp index 91d66dd0..04d7bb48 100644 --- a/Tactical/SkillCheck.cpp +++ b/Tactical/SkillCheck.cpp @@ -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; diff --git a/Tactical/Soldier Ani.cpp b/Tactical/Soldier Ani.cpp index 58ecc1e7..d2b833e1 100644 --- a/Tactical/Soldier Ani.cpp +++ b/Tactical/Soldier Ani.cpp @@ -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 ) diff --git a/Tactical/Soldier Control.h b/Tactical/Soldier Control.h index 76ba9cce..13d4953f 100644 --- a/Tactical/Soldier Control.h +++ b/Tactical/Soldier Control.h @@ -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 diff --git a/Tactical/Soldier Profile.cpp b/Tactical/Soldier Profile.cpp index b2c1c336..2ba04940 100644 --- a/Tactical/Soldier Profile.cpp +++ b/Tactical/Soldier Profile.cpp @@ -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 ) diff --git a/Tactical/opplist.cpp b/Tactical/opplist.cpp index f3c61f80..495f392f 100644 --- a/Tactical/opplist.cpp +++ b/Tactical/opplist.cpp @@ -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) { diff --git a/Tactical/soldier profile type.h b/Tactical/soldier profile type.h index 04735ce4..a3b85346 100644 --- a/Tactical/soldier profile type.h +++ b/Tactical/soldier profile type.h @@ -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