Added Speck as a playable merc (by anv)

o Speck can be hired by M.E.R.C
o From now on, as long as Speck is hired (or dead, or POW, or travelling), he won't be sitting on Speck Com nor sending you emails. However, is he's able to, he'll comment on current situation from battlefield: player owing money, Flo getting married, MERC merc dying, etc., so keeping him alive might be a good idea
o GameDir data revision >= 1701

git-svn-id: https://ja2svn.mooo.com/source/ja2/trunk/GameSource/ja2_v1.13/Build@6215 3b4a5df2-a311-0410-b5c6-a8a6f20db521
This commit is contained in:
Wanne
2013-07-11 19:54:50 +00:00
parent e48ad7ad56
commit 957e8cc76c
10 changed files with 284 additions and 32 deletions
+38
View File
@@ -248,6 +248,12 @@ enum
SPECK_QUOTE_RANDOM_CHIT_CHAT_1,
SPECK_QUOTE_RANDOM_CHIT_CHAT_2,
// anv: additional quotes for playable Speck
SPECK_QUOTE_PLAYER_NOT_DOING_ANYTHING_SPECK_SELLS_HIMSELF,
SPECK_QUOTE_PLAYER_HIRES_SPECK,
SPECK_QUOTE_PLAYER_HIRES_SPECK_TOGETHER_WITH_VICKI,
SPECK_QUOTE_SPECK_UNAVAILABLE,
/*
SPECK_QUOTE_,
SPECK_QUOTE_,
@@ -265,6 +271,38 @@ enum
SPECK_QUOTE_,
*/
};
// anv: quotes for Speck's recruitable alter ego
enum{
SPECK_PLAYABLE_QUOTE_PLAYER_OWES_SPECK_ACCOUNT_SUSPENDED = 80,
SPECK_PLAYABLE_QUOTE_PLAYER_OWES_SPECK_ALMOST_BANKRUPT_1,
SPECK_PLAYABLE_QUOTE_PLAYER_OWES_SPECK_ALMOST_BANKRUPT_2,
SPECK_PLAYABLE_QUOTE_NEW_MERCS_AVAILABLE = 83,
SPECK_PLAYABLE_QUOTE_SERVER_WENT_DOWN = 84,
SPECK_PLAYABLE_QUOTE_PLAYERS_LOST_MERCS = 85,
SPECK_PLAYABLE_QUOTE_FIRST_MERC_DIES = 86,
SPECK_PLAYABLE_QUOTE_BIFF_IS_DEAD,
SPECK_PLAYABLE_QUOTE_HAYWIRE_IS_DEAD,
SPECK_PLAYABLE_QUOTE_GASKET_IS_DEAD,
SPECK_PLAYABLE_QUOTE_RAZOR_IS_DEAD,
SPECK_PLAYABLE_QUOTE_FLO_IS_DEAD_BIFF_ALIVE,
SPECK_PLAYABLE_QUOTE_FLO_IS_DEAD_BIFF_IS_DEAD,
SPECK_PLAYABLE_QUOTE_GUMPY_IS_DEAD,
SPECK_PLAYABLE_QUOTE_LARRY_IS_DEAD,
SPECK_PLAYABLE_QUOTE_COUGER_IS_DEAD,
SPECK_PLAYABLE_QUOTE_NUMB_IS_DEAD,
SPECK_PLAYABLE_QUOTE_BUBBA_IS_DEAD,
SPECK_PLAYABLE_QUOTE_GASTON_DEAD,
SPECK_PLAYABLE_QUOTE_STOGIE_DEAD,
SPECK_PLAYABLE_QUOTE_LARRY_RELAPSED,
SPECK_PLAYABLE_QUOTE_FLO_MARRIED_A_COUSIN_BIFF_IS_ALIVE,
};
#endif
#endif
Binary file not shown.
+198 -31
View File
@@ -258,6 +258,8 @@ NUMBER_TIMES_QUOTE_SAID gNumberOfTimesQuoteSaid[ MERC_NUMBER_OF_RANDOM_QUOTES
{ SPECK_QUOTE_PLAYER_NOT_DOING_ANYTHING_AIM_SLANDER_2, 0 },
{ SPECK_QUOTE_PLAYER_NOT_DOING_ANYTHING_AIM_SLANDER_3, 0 },
{ SPECK_QUOTE_PLAYER_NOT_DOING_ANYTHING_AIM_SLANDER_4, 0 },
{ SPECK_QUOTE_PLAYER_NOT_DOING_ANYTHING_SPECK_SELLS_HIMSELF, 0 },
};
@@ -323,7 +325,7 @@ BOOLEAN ShouldTheMercSiteServerGoDown();
void DrawMercVideoBackGround();
BOOLEAN CanMercQuoteBeSaid( UINT32 uiQuoteID );
UINT8 NumberOfMercMercsDead();
void MakeBiffAwayForCoupleOfDays();
//void MakeBiffAwayForCoupleOfDays(); // anv: moved to mercs.h
BOOLEAN AreAnyOfTheNewMercsAvailable();
void ShouldAnyNewMercMercBecomeAvailable();
BOOLEAN CanMercBeAvailableYet( UINT8 ubMercToCheck );
@@ -621,6 +623,15 @@ void HandleMercs()
gfMercSiteScreenIsReDrawn = TRUE;
}
// anv: stop, Speck can't say anything because he's out of reach
if( !IsSpeckComAvailable() )
{
gusMercVideoSpeckSpeech = MERC_VIDEO_SPECK_SPEECH_NOT_TALKING;
gubCurrentMercVideoMode = MERC_VIDEO_NO_VIDEO_MODE;
RenderMercs();
gfRedrawMercSite = TRUE;
}
//if Speck has something to say, say it
if( gusMercVideoSpeckSpeech != MERC_VIDEO_SPECK_SPEECH_NOT_TALKING )// && !gfDoneIntroSpeech )
{
@@ -884,7 +895,15 @@ void DailyUpdateOfMercSite( UINT16 usDate)
if( LaptopSaveInfo.gubPlayersMercAccountStatus != MERC_ACCOUNT_INVALID )
{
LaptopSaveInfo.gubPlayersMercAccountStatus = MERC_ACCOUNT_INVALID;
AddEmail( MERC_INVALID, MERC_INVALID_LENGTH, SPECK_FROM_MERC, GetWorldTotalMin(), -1, -1, TYPE_EMAIL_EMAIL_EDT);
if( IsSpeckComAvailable() )
{
AddEmail( MERC_INVALID, MERC_INVALID_LENGTH, SPECK_FROM_MERC, GetWorldTotalMin(), -1, -1, TYPE_EMAIL_EMAIL_EDT);
}
else
{
// anv: Have speck complain personally
TacticalCharacterDialogue( FindSoldierByProfileID( SPECK_PLAYABLE , TRUE ) , SPECK_PLAYABLE_QUOTE_PLAYER_OWES_SPECK_ACCOUNT_SUSPENDED );
}
}
}
else if( iNumDays > MERC_NUM_DAYS_TILL_ACCOUNT_SUSPENDED )
@@ -892,10 +911,18 @@ void DailyUpdateOfMercSite( UINT16 usDate)
if( LaptopSaveInfo.gubPlayersMercAccountStatus != MERC_ACCOUNT_SUSPENDED )
{
LaptopSaveInfo.gubPlayersMercAccountStatus = MERC_ACCOUNT_SUSPENDED;
AddEmail( MERC_WARNING, MERC_WARNING_LENGTH, SPECK_FROM_MERC, GetWorldTotalMin(), -1, -1, TYPE_EMAIL_EMAIL_EDT);
if( IsSpeckComAvailable() )
{
AddEmail( MERC_WARNING, MERC_WARNING_LENGTH, SPECK_FROM_MERC, GetWorldTotalMin(), -1, -1, TYPE_EMAIL_EMAIL_EDT);
// Have speck complain next time player come to site
LaptopSaveInfo.uiSpeckQuoteFlags |= SPECK_QUOTE__SENT_EMAIL_ABOUT_LACK_OF_PAYMENT;
// Have speck complain next time player come to site
LaptopSaveInfo.uiSpeckQuoteFlags |= SPECK_QUOTE__SENT_EMAIL_ABOUT_LACK_OF_PAYMENT;
}
else
{
// anv: Have speck complain personally
TacticalCharacterDialogue( FindSoldierByProfileID( SPECK_PLAYABLE , TRUE ) , SPECK_PLAYABLE_QUOTE_PLAYER_OWES_SPECK_ALMOST_BANKRUPT_2);
}
}
}
else if( iNumDays > MERC_NUM_DAYS_TILL_FIRST_WARNING)
@@ -903,10 +930,18 @@ void DailyUpdateOfMercSite( UINT16 usDate)
if( LaptopSaveInfo.gubPlayersMercAccountStatus != MERC_ACCOUNT_VALID_FIRST_WARNING )
{
LaptopSaveInfo.gubPlayersMercAccountStatus = MERC_ACCOUNT_VALID_FIRST_WARNING;
AddEmail( MERC_FIRST_WARNING, MERC_FIRST_WARNING_LENGTH, SPECK_FROM_MERC, GetWorldTotalMin(), -1, -1, TYPE_EMAIL_EMAIL_EDT);
if( IsSpeckComAvailable() )
{
AddEmail( MERC_FIRST_WARNING, MERC_FIRST_WARNING_LENGTH, SPECK_FROM_MERC, GetWorldTotalMin(), -1, -1, TYPE_EMAIL_EMAIL_EDT);
// Have speck complain next time player come to site
LaptopSaveInfo.uiSpeckQuoteFlags |= SPECK_QUOTE__SENT_EMAIL_ABOUT_LACK_OF_PAYMENT;
// Have speck complain next time player come to site
LaptopSaveInfo.uiSpeckQuoteFlags |= SPECK_QUOTE__SENT_EMAIL_ABOUT_LACK_OF_PAYMENT;
}
else
{
// anv: Have speck complain personally
TacticalCharacterDialogue( FindSoldierByProfileID( SPECK_PLAYABLE , TRUE ) , SPECK_PLAYABLE_QUOTE_PLAYER_OWES_SPECK_ALMOST_BANKRUPT_1 );
}
}
}
#endif
@@ -2297,6 +2332,13 @@ void HandlePlayerHiringMerc( UINT8 ubHiredMercID )
break;
#endif
// anv: Speck is hired
case SPECK_PLAYABLE:
if( IsMercOnTeam( VICKI ) )
StartSpeckTalking( SPECK_QUOTE_PLAYER_HIRES_SPECK_TOGETHER_WITH_VICKI );
else
StartSpeckTalking( SPECK_QUOTE_PLAYER_HIRES_SPECK );
break;
}
}
@@ -2331,25 +2373,29 @@ BOOLEAN ShouldSpeckStartTalkingDueToActionOnSubPage()
{
HandlePlayerHiringMerc( GetMercIDFromMERCArray( gubCurMercIndex ) );
#ifdef JA2UB
//if it hasnt been said, say the better equipment quote
if( !HasImportantSpeckQuoteBeingSaid( SPECK_QUOTE_BETTER_STARTING_EQPMNT_TAG_ON ) )
if( IsSpeckComAvailable() )
{
StartSpeckTalking( SPECK_QUOTE_BETTER_STARTING_EQPMNT_TAG_ON );
}
#endif
//get speck to say the thank you
if( Random( 100 ) > 50 )
StartSpeckTalking( SPECK_QUOTE_GENERIC_THANKS_FOR_HIRING_MERCS_1 );
else
StartSpeckTalking( SPECK_QUOTE_GENERIC_THANKS_FOR_HIRING_MERCS_2 );
#ifdef JA2UB
//if it hasnt been said, say the encouraged to shop quote
if( !HasImportantSpeckQuoteBeingSaid( SPECK_QUOTE_ENCOURAGE_SHOP_TAG_ON ) )
{
StartSpeckTalking( SPECK_QUOTE_ENCOURAGE_SHOP_TAG_ON );
}
//if it hasnt been said, say the better equipment quote
if( !HasImportantSpeckQuoteBeingSaid( SPECK_QUOTE_BETTER_STARTING_EQPMNT_TAG_ON ) )
{
StartSpeckTalking( SPECK_QUOTE_BETTER_STARTING_EQPMNT_TAG_ON );
}
#endif
//get speck to say the thank you
if( Random( 100 ) > 50 )
StartSpeckTalking( SPECK_QUOTE_GENERIC_THANKS_FOR_HIRING_MERCS_1 );
else
StartSpeckTalking( SPECK_QUOTE_GENERIC_THANKS_FOR_HIRING_MERCS_2 );
#ifdef JA2UB
//if it hasnt been said, say the encouraged to shop quote
if( !HasImportantSpeckQuoteBeingSaid( SPECK_QUOTE_ENCOURAGE_SHOP_TAG_ON ) )
{
StartSpeckTalking( SPECK_QUOTE_ENCOURAGE_SHOP_TAG_ON );
}
#endif
}
gfJustHiredAMercMerc = FALSE;
// gfDoneIntroSpeech = TRUE;
@@ -2361,7 +2407,103 @@ BOOLEAN ShouldSpeckStartTalkingDueToActionOnSubPage()
return( FALSE );
}
BOOLEAN IsSpeckComAvailable() // anv: Prevent Speck from talking if his playable version is out of reach
{
//he's hired, travelling, dead or POW, he cant' talk
if( ( ( IsMercOnTeam( SPECK_PLAYABLE )
|| gMercProfiles[ SPECK_PLAYABLE ].bMercStatus == MERC_IS_DEAD
|| gMercProfiles[ SPECK_PLAYABLE ].bMercStatus == MERC_RETURNING_HOME
|| gMercProfiles[ SPECK_PLAYABLE ].bMercStatus == MERC_FIRED_AS_A_POW ) )
//he still can talk if he was just hired, so he can say his recruitment quote
&& ( GetMercIDFromMERCArray( gubCurMercIndex ) != SPECK_PLAYABLE
|| gusMercVideoSpeckSpeech == SPECK_QUOTE_PLAYER_TRIES_TO_HIRE_ALREADY_HIRED_MERC
|| gusMercVideoSpeckSpeech == SPECK_QUOTE_BIFF_UNAVALIABLE
|| gusMercVideoSpeckSpeech == SPECK_QUOTE_SPECK_UNAVAILABLE
) )
{
return(FALSE);
}
return(TRUE);
}
void HandleSpeckWitnessingEmployeeDeath( SOLDIERTYPE* pSoldier ) // anv: handle playable Speck witnessing his employee death
{
if(pSoldier->ubWhatKindOfMercAmI == MERC_TYPE__MERC)
{
// first blood
if( !LaptopSaveInfo.fHasAMercDiedAtMercSite )
{
LaptopSaveInfo.fHasAMercDiedAtMercSite = TRUE;
TacticalCharacterDialogue( FindSoldierByProfileID( SPECK_PLAYABLE , TRUE ), SPECK_PLAYABLE_QUOTE_FIRST_MERC_DIES );
}
// numerous casualties, Speck whines...
else if( CountNumberOfMercMercsWhoAreDead() >= 2 && LaptopSaveInfo.ubSpeckCanSayPlayersLostQuote )
{
TacticalCharacterDialogue( FindSoldierByProfileID( SPECK_PLAYABLE , TRUE ), SPECK_PLAYABLE_QUOTE_PLAYERS_LOST_MERCS );
//Set it so speck Wont say the quote again till someone else dies
LaptopSaveInfo.ubSpeckCanSayPlayersLostQuote = 0;
}
// merc specific requiem
switch( pSoldier->ubProfile )
{
case BIFF:
TacticalCharacterDialogue( FindSoldierByProfileID( SPECK_PLAYABLE , TRUE ), SPECK_PLAYABLE_QUOTE_BIFF_IS_DEAD );
break;
case HAYWIRE:
TacticalCharacterDialogue( FindSoldierByProfileID( SPECK_PLAYABLE , TRUE ), SPECK_PLAYABLE_QUOTE_HAYWIRE_IS_DEAD);
break;
case GASKET:
TacticalCharacterDialogue( FindSoldierByProfileID( SPECK_PLAYABLE , TRUE ), SPECK_PLAYABLE_QUOTE_GASKET_IS_DEAD );
break;
case RAZOR:
TacticalCharacterDialogue( FindSoldierByProfileID( SPECK_PLAYABLE , TRUE ), SPECK_PLAYABLE_QUOTE_RAZOR_IS_DEAD );
break;
case FLO:
//if biff is dead
if( IsMercDead( BIFF ) )
TacticalCharacterDialogue( FindSoldierByProfileID( SPECK_PLAYABLE , TRUE ), SPECK_PLAYABLE_QUOTE_FLO_IS_DEAD_BIFF_IS_DEAD );
else
{
TacticalCharacterDialogue( FindSoldierByProfileID( SPECK_PLAYABLE , TRUE ), SPECK_PLAYABLE_QUOTE_FLO_IS_DEAD_BIFF_ALIVE);
MakeBiffAwayForCoupleOfDays();
}
break;
case GUMPY:
TacticalCharacterDialogue( FindSoldierByProfileID( SPECK_PLAYABLE , TRUE ), SPECK_PLAYABLE_QUOTE_GUMPY_IS_DEAD);
break;
case LARRY_NORMAL:
case LARRY_DRUNK:
TacticalCharacterDialogue( FindSoldierByProfileID( SPECK_PLAYABLE , TRUE ), SPECK_PLAYABLE_QUOTE_LARRY_IS_DEAD);
break;
case COUGAR:
TacticalCharacterDialogue( FindSoldierByProfileID( SPECK_PLAYABLE , TRUE ), SPECK_PLAYABLE_QUOTE_COUGER_IS_DEAD);
break;
case NUMB:
TacticalCharacterDialogue( FindSoldierByProfileID( SPECK_PLAYABLE , TRUE ), SPECK_PLAYABLE_QUOTE_NUMB_IS_DEAD);
break;
case BUBBA:
TacticalCharacterDialogue( FindSoldierByProfileID( SPECK_PLAYABLE , TRUE ), SPECK_PLAYABLE_QUOTE_BUBBA_IS_DEAD);
break;
#ifdef JA2UB
case 58://GASTON:
TacticalCharacterDialogue( FindSoldierByProfileID( SPECK_PLAYABLE , TRUE ), SPECK_PLAYABLE_QUOTE_GASTON_DEAD);
break;
case 59://STOGIE:
TacticalCharacterDialogue( FindSoldierByProfileID( SPECK_PLAYABLE , TRUE ), SPECK_PLAYABLE_QUOTE_STOGIE_DEAD);
break;
#else
case GASTON:
TacticalCharacterDialogue( FindSoldierByProfileID( SPECK_PLAYABLE , TRUE ), SPECK_PLAYABLE_QUOTE_GASTON_DEAD);
break;
case STOGIE:
TacticalCharacterDialogue( FindSoldierByProfileID( SPECK_PLAYABLE , TRUE ), SPECK_PLAYABLE_QUOTE_STOGIE_DEAD);
break;
#endif
}
}
}
BOOLEAN ShouldSpeckSayAQuote()
{
@@ -2556,11 +2698,21 @@ BOOLEAN ShouldTheMercSiteServerGoDown()
#else
void GetMercSiteBackOnline()
{
//Add an email telling the user the site is back up
AddEmail( MERC_NEW_SITE_ADDRESS, MERC_NEW_SITE_ADDRESS_LENGTH, SPECK_FROM_MERC, GetWorldTotalMin(), -1, -1 , TYPE_EMAIL_EMAIL_EDT);
if( IsSpeckComAvailable )
{
//Add an email telling the user the site is back up
AddEmail( MERC_NEW_SITE_ADDRESS, MERC_NEW_SITE_ADDRESS_LENGTH, SPECK_FROM_MERC, GetWorldTotalMin(), -1, -1 , TYPE_EMAIL_EMAIL_EDT);
//Set a flag indicating that the server just went up ( so speck can make a comment when the player next visits the site )
LaptopSaveInfo.fFirstVisitSinceServerWentDown = TRUE;
//Set a flag indicating that the server just went up ( so speck can make a comment when the player next visits the site )
LaptopSaveInfo.fFirstVisitSinceServerWentDown = TRUE;
}
else
{
// anv: Have Speck inform player personally
TacticalCharacterDialogue( FindSoldierByProfileID( SPECK_PLAYABLE , TRUE ), SPECK_PLAYABLE_QUOTE_SERVER_WENT_DOWN );
// don't bring this up again
LaptopSaveInfo.fFirstVisitSinceServerWentDown = 2;
}
}
#endif
@@ -2644,6 +2796,13 @@ BOOLEAN CanMercQuoteBeSaid( UINT32 uiQuoteID )
if( !IsMercMercAvailable( BUBBA ) )
fRetVal = FALSE;
break;
//anv: playable Speck
case SPECK_QUOTE_PLAYER_NOT_DOING_ANYTHING_SPECK_SELLS_HIMSELF:
if( !IsMercMercAvailable( SPECK_PLAYABLE ) )
fRetVal = FALSE;
break;
#ifdef JA2UB
case SPECK_QUOTE_BIFF_DEAD_WHEN_IMPORTING:
if( !gJa25SaveStruct.fBiffWasKilledWhenImportingSave )
@@ -2789,10 +2948,18 @@ void NewMercsAvailableAtMercSiteCallBack( )
LaptopSaveInfo.ubLastMercAvailableId = gConditionsForMercAvailability[i].uiIndex;
gConditionsForMercAvailability[i].StartMercsAvailable = TRUE;
AddEmail( NEW_MERCS_AT_MERC, NEW_MERCS_AT_MERC_LENGTH, SPECK_FROM_MERC, GetWorldTotalMin(), -1, -1, TYPE_EMAIL_EMAIL_EDT);
if( IsSpeckComAvailable() )
{
AddEmail( NEW_MERCS_AT_MERC, NEW_MERCS_AT_MERC_LENGTH, SPECK_FROM_MERC, GetWorldTotalMin(), -1, -1, TYPE_EMAIL_EMAIL_EDT);
//new mercs are available
LaptopSaveInfo.fNewMercsAvailableAtMercSite = TRUE;
//new mercs are available
LaptopSaveInfo.fNewMercsAvailableAtMercSite = TRUE;
}
else
{
// anv: Have speck inform player personally
TacticalCharacterDialogue( FindSoldierByProfileID( SPECK_PLAYABLE, TRUE ), SPECK_PLAYABLE_QUOTE_NEW_MERCS_AVAILABLE );
}
}
}
}
+7
View File
@@ -149,6 +149,13 @@ extern UINT8 gubCurMercIndex;
extern BOOLEAN gfJustHiredAMercMerc;
// anv: moved declaration for use with playable Speck in other classes (Flo marrying Hicks)
void MakeBiffAwayForCoupleOfDays();
// anv: for playable Speck
BOOLEAN IsSpeckComAvailable();
void HandleSpeckWitnessingEmployeeDeath( SOLDIERTYPE* pSoldier );
void InitializeNumDaysMercArrive();
void NewMercsAvailableAtMercSiteCallBack( );
+7
View File
@@ -17,6 +17,9 @@
#include "Game Clock.h"
#endif
// anv: for playable Speck
#include "mercs.h"
StrategicMapElement StrategicMap[MAP_WORLD_X*MAP_WORLD_Y];
extern BOOLEAN fReDrawFace;
@@ -123,6 +126,10 @@ void HandleSoldierDeadComments( SOLDIERTYPE *pSoldier )
break;
}
}
// anv: handle Speck witnessing his employee death
if( pTeamSoldier->ubProfile == SPECK_PLAYABLE && pSoldier->ubWhatKindOfMercAmI == MERC_TYPE__MERC )
HandleSpeckWitnessingEmployeeDeath( pSoldier );
}
+3 -1
View File
@@ -50,6 +50,7 @@
#endif
#include "email.h"
#include "mercs.h"
//forward declarations of common classes to eliminate includes
@@ -2044,7 +2045,8 @@ void MERCMercWentUpALevelSendEmail( UINT8 ubMercMercIdValue )
else
pMerc = 0;
if ( gProfilesMERC[ubMercMercIdValue].ProfilId == ubMercMercIdValue )
AddEmailTypeXML( pMerc, iMerc, iMerc, GetWorldTotalMin(), -1 , TYPE_EMAIL_MERC_LEVEL_UP);
if( IsSpeckComAvailable() )// anv: only send level up email if Speck is available at website
AddEmailTypeXML( pMerc, iMerc, iMerc, GetWorldTotalMin(), -1 , TYPE_EMAIL_MERC_LEVEL_UP);
}
else
{
+12
View File
@@ -94,6 +94,10 @@
#include "Ja25Update.h"
#endif
// anv: for playable Speck
#include "Speck Quotes.h"
#include "mercs.h"
//forward declarations of common classes to eliminate includes
class OBJECTTYPE;
class SOLDIERTYPE;
@@ -2724,6 +2728,14 @@ void HandleNPCDoAction( UINT8 ubTargetNPC, UINT16 usActionCode, UINT8 ubQuoteNum
if( pSoldier->ubProfile == FLO )
{
SetFactTrue( FACT_PC_MARRYING_DARYL_IS_FLO );
// anv: make Speck whine about it immediately if on team
if( !IsMercDead(BIFF) && !IsSpeckComAvailable() )
{
TacticalCharacterDialogue( FindSoldierByProfileID( SPECK_PLAYABLE , TRUE ), SPECK_PLAYABLE_QUOTE_FLO_MARRIED_A_COUSIN_BIFF_IS_ALIVE );
// don't bring this up again
LaptopSaveInfo.fSpeckSaidFloMarriedCousinQuote = TRUE;
MakeBiffAwayForCoupleOfDays();
}
}
HandleMoraleEvent( pSoldier, MORALE_MERC_MARRIED, gWorldSectorX, gWorldSectorY, gbWorldSectorZ );
+6
View File
@@ -123,6 +123,9 @@
#include "ub_config.h"
#endif
// anv: for playable Speck
#include "mercs.h"
// OJW - 20090419
UINT8 giMAXIMUM_NUMBER_OF_PLAYER_MERCS = CODE_MAXIMUM_NUMBER_OF_PLAYER_MERCS;
UINT8 giMAXIMUM_NUMBER_OF_PLAYER_VEHICLES = CODE_MAXIMUM_NUMBER_OF_PLAYER_VEHICLES;
@@ -3359,6 +3362,9 @@ void HandlePlayerTeamMemberDeath( SOLDIERTYPE *pSoldier )
default:
break;
}
// anv: handle Speck witnessing his employee death
if( pTeamSoldier->ubProfile == SPECK_PLAYABLE && pSoldier->ubWhatKindOfMercAmI == MERC_TYPE__MERC )
HandleSpeckWitnessingEmployeeDeath( pSoldier );
}
}
+11
View File
@@ -64,6 +64,10 @@
#include "ub_config.h"
#include "XML.h"
// anv: for playable Speck
#include "Speck Quotes.h"
#include "LaptopSave.h"
#include "connect.h"
#ifdef JA2EDITOR
extern BOOLEAN gfProfileDataLoaded;
@@ -2342,6 +2346,13 @@ SOLDIERTYPE * SwapLarrysProfiles( SOLDIERTYPE * pSoldier )
if ( pSoldier->ubProfile == LARRY_DRUNK )
{
SetFactTrue( FACT_LARRY_CHANGED );
// anv: make speck whine about it immediately if on team
if( !IsSpeckComAvailable() )
{
TacticalCharacterDialogue( FindSoldierByProfileID( SPECK_PLAYABLE , TRUE ), SPECK_PLAYABLE_QUOTE_LARRY_RELAPSED );
// don't bring this up again
LaptopSaveInfo.uiSpeckQuoteFlags |= SPECK_QUOTE__ALREADY_TOLD_PLAYER_THAT_LARRY_RELAPSED;
}
}
else
{
+2
View File
@@ -87,6 +87,7 @@ extern BOOLEAN LoadNewSystemMercsToSaveGameFile( HWFILE hFile );
enum NPCIDs
{
VICKI = 4,// anv: check when hiring Speck
BIFF = 40,
HAYWIRE,
GASKET,
@@ -240,6 +241,7 @@ enum NPCIDs
NPC169,
#endif
NPC170 = NPC169 + 84,
SPECK_PLAYABLE = 191,// anv
} ;
BOOLEAN LoadMercProfiles(void);