mirror of
https://github.com/1dot13/source.git
synced 2026-07-22 13:40:22 +02:00
New ability: a disguised spy can distract unalerted enemies, making it easier to sneak by.
For more info, see http://thepit.ja-galaxy-forum.com/index.php?t=msg&th=20228&goto=352562&#msg_352562 git-svn-id: https://ja2svn.mooo.com/source/ja2/trunk/GameSource/ja2_v1.13/Build@8528 3b4a5df2-a311-0410-b5c6-a8a6f20db521
This commit is contained in:
+9
-9
@@ -15,9 +15,9 @@
|
||||
#ifdef JA2EDITOR
|
||||
|
||||
#ifdef JA2UB
|
||||
CHAR16 zVersionLabel[256] = { L"Unfinished Business - Map Editor v1.13.8525 (Development Build)" };
|
||||
CHAR16 zVersionLabel[256] = { L"Unfinished Business - Map Editor v1.13.8528 (Development Build)" };
|
||||
#else
|
||||
CHAR16 zVersionLabel[256] = { L"Map Editor v1.13.8525 (Development Build)" };
|
||||
CHAR16 zVersionLabel[256] = { L"Map Editor v1.13.8528 (Development Build)" };
|
||||
#endif
|
||||
|
||||
// ------------------------------
|
||||
@@ -27,11 +27,11 @@
|
||||
|
||||
//DEBUG BUILD VERSION
|
||||
#ifdef JA2UB
|
||||
CHAR16 zVersionLabel[256] = { L"Debug: Unfinished Business - v1.13.8525 (Development Build)" };
|
||||
CHAR16 zVersionLabel[256] = { L"Debug: Unfinished Business - v1.13.8528 (Development Build)" };
|
||||
#elif defined (JA113DEMO)
|
||||
CHAR16 zVersionLabel[256] = { L"Debug: JA2 Demo - v1.13.8525 (Development Build)" };
|
||||
CHAR16 zVersionLabel[256] = { L"Debug: JA2 Demo - v1.13.8528 (Development Build)" };
|
||||
#else
|
||||
CHAR16 zVersionLabel[256] = { L"Debug: v1.13.8525 (Development Build)" };
|
||||
CHAR16 zVersionLabel[256] = { L"Debug: v1.13.8528 (Development Build)" };
|
||||
#endif
|
||||
|
||||
#elif defined CRIPPLED_VERSION
|
||||
@@ -46,16 +46,16 @@
|
||||
|
||||
//RELEASE BUILD VERSION
|
||||
#ifdef JA2UB
|
||||
CHAR16 zVersionLabel[256] = { L"Release Unfinished Business - v1.13.8525 (Development Build)" };
|
||||
CHAR16 zVersionLabel[256] = { L"Release Unfinished Business - v1.13.8528 (Development Build)" };
|
||||
#elif defined (JA113DEMO)
|
||||
CHAR16 zVersionLabel[256] = { L"Release JA2 Demo - v1.13.8525 (Development Build)" };
|
||||
CHAR16 zVersionLabel[256] = { L"Release JA2 Demo - v1.13.8528 (Development Build)" };
|
||||
#else
|
||||
CHAR16 zVersionLabel[256] = { L"Release v1.13.8525 (Development Build)" };
|
||||
CHAR16 zVersionLabel[256] = { L"Release v1.13.8528 (Development Build)" };
|
||||
#endif
|
||||
|
||||
#endif
|
||||
|
||||
CHAR8 czVersionNumber[16] = { "Build 18.02.22" }; //YY.MM.DD
|
||||
CHAR8 czVersionNumber[16] = { "Build 18.02.25" }; //YY.MM.DD
|
||||
CHAR16 zTrackingNumber[16] = { L"Z" };
|
||||
|
||||
// SAVE_GAME_VERSION is defined in header, change it there
|
||||
|
||||
+2
-1
@@ -21,6 +21,7 @@ extern CHAR16 zTrackingNumber[16];
|
||||
// Keeps track of the saved game version. Increment the saved game version whenever
|
||||
// you will invalidate the saved game file
|
||||
|
||||
#define CHAT_TO_DISTRACT 176 // Flugente: internal variable allows us to distract enemies by engrossing them in conversation
|
||||
#define INDIVIDUAL_MILITIA_RANKFIX 175 // Flugente: internal individual militia change requires variable change
|
||||
#define DRAGPERSONS 174 // Flugente: we can drag people and corpses now
|
||||
#define SEPARATE_VOICESETS 173 // Flugente: voice sets are now separate from profile slots, and we can have many more of them
|
||||
@@ -94,7 +95,7 @@ extern CHAR16 zTrackingNumber[16];
|
||||
#define AP100_SAVEGAME_DATATYPE_CHANGE 105 // Before this, we didn't have the 100AP structure changes
|
||||
#define NIV_SAVEGAME_DATATYPE_CHANGE 102 // Before this, we used the old structure system
|
||||
|
||||
#define SAVE_GAME_VERSION INDIVIDUAL_MILITIA_RANKFIX
|
||||
#define SAVE_GAME_VERSION CHAT_TO_DISTRACT
|
||||
|
||||
//#define RUSSIANGOLD
|
||||
#ifdef __cplusplus
|
||||
|
||||
+4
-1
@@ -2221,7 +2221,10 @@ BOOLEAN SOLDIERTYPE::Load(HWFILE hFile)
|
||||
this->CancelDrag();
|
||||
}
|
||||
|
||||
numBytesRead = ReadFieldByField(hFile, &this->bUnusedINT16_5, sizeof(bUnusedINT16_5), sizeof(INT16), numBytesRead );
|
||||
numBytesRead = ReadFieldByField(hFile, &this->usChatPartnerID, sizeof( usChatPartnerID ), sizeof(INT16), numBytesRead );
|
||||
|
||||
if ( guiCurrentSaveGameVersion < CHAT_TO_DISTRACT )
|
||||
this->usChatPartnerID = NOBODY;
|
||||
|
||||
numBytesRead = ReadFieldByField(hFile, &this->bExtraStrength, sizeof(bExtraStrength), sizeof(INT16), numBytesRead);
|
||||
numBytesRead = ReadFieldByField(hFile, &this->bExtraDexterity, sizeof(bExtraDexterity), sizeof(INT16), numBytesRead);
|
||||
|
||||
+88
-6
@@ -483,6 +483,86 @@ void BeginCivQuote( SOLDIERTYPE *pCiv, UINT16 ubCivQuoteID, UINT16 ubEntryID, IN
|
||||
gCivQuoteData.pCiv = pCiv;
|
||||
}
|
||||
|
||||
void BeginChatQuote( SOLDIERTYPE *pCiv, INT16 sX, INT16 sY )
|
||||
{
|
||||
VIDEO_OVERLAY_DESC VideoOverlayDesc;
|
||||
|
||||
// OK, do we have another on?
|
||||
if ( gCivQuoteData.bActive )
|
||||
{
|
||||
// Delete?
|
||||
ShutDownQuoteBox( TRUE );
|
||||
}
|
||||
|
||||
if ( pCiv->bTeam == gbPlayerNum )
|
||||
swprintf( gzCivQuote, L"\"%s\"", szChatTextSpy[Random( 24 )] );
|
||||
else
|
||||
swprintf( gzCivQuote, L"\"%s\"", szChatTextEnemy[Random( 24 )] );
|
||||
|
||||
// Create video oeverlay....
|
||||
memset( &VideoOverlayDesc, 0, sizeof( VIDEO_OVERLAY_DESC ) );
|
||||
|
||||
// Prepare text box
|
||||
gCivQuoteData.iDialogueBox = PrepareMercPopupBox( gCivQuoteData.iDialogueBox, BASIC_MERC_POPUP_BACKGROUND, BASIC_MERC_POPUP_BORDER, gzCivQuote, DIALOGUE_DEFAULT_WIDTH, 0, 0, 0, &gusCivQuoteBoxWidth, &gusCivQuoteBoxHeight );
|
||||
|
||||
// Flugente: have the box appear a bit above the soldier. Otherwise it will obstruct us from aiming at him, which is annoying if it happens very often
|
||||
sY -= 30;
|
||||
|
||||
// OK, find center for box......
|
||||
sX = sX - ( gusCivQuoteBoxWidth / 2 );
|
||||
sY = sY - ( gusCivQuoteBoxHeight / 2 );
|
||||
|
||||
// OK, limit to screen......
|
||||
{
|
||||
if ( sX < 0 )
|
||||
{
|
||||
sX = 0;
|
||||
}
|
||||
|
||||
// CHECK FOR LEFT/RIGHT
|
||||
if ( ( sX + gusCivQuoteBoxWidth ) > SCREEN_WIDTH )
|
||||
{
|
||||
sX = SCREEN_WIDTH - gusCivQuoteBoxWidth;
|
||||
}
|
||||
|
||||
// Now check for top
|
||||
if ( sY < gsVIEWPORT_WINDOW_START_Y )
|
||||
{
|
||||
sY = gsVIEWPORT_WINDOW_START_Y;
|
||||
}
|
||||
|
||||
// Check for bottom
|
||||
if ( ( sY + gusCivQuoteBoxHeight ) > ( SCREEN_HEIGHT - INV_INTERFACE_HEIGHT ) )
|
||||
{
|
||||
sY = ( SCREEN_HEIGHT - INV_INTERFACE_HEIGHT ) - gusCivQuoteBoxHeight;
|
||||
}
|
||||
}
|
||||
|
||||
VideoOverlayDesc.sLeft = sX;
|
||||
VideoOverlayDesc.sTop = sY;
|
||||
VideoOverlayDesc.sRight = VideoOverlayDesc.sLeft + gusCivQuoteBoxWidth;
|
||||
VideoOverlayDesc.sBottom = VideoOverlayDesc.sTop + gusCivQuoteBoxHeight;
|
||||
VideoOverlayDesc.sX = VideoOverlayDesc.sLeft;
|
||||
VideoOverlayDesc.sY = VideoOverlayDesc.sTop;
|
||||
VideoOverlayDesc.BltCallback = RenderCivQuoteBoxOverlay;
|
||||
|
||||
gCivQuoteData.iVideoOverlay = RegisterVideoOverlay( 0, &VideoOverlayDesc );
|
||||
|
||||
//Define main region
|
||||
MSYS_DefineRegion( &( gCivQuoteData.MouseRegion ), VideoOverlayDesc.sLeft, VideoOverlayDesc.sTop, VideoOverlayDesc.sRight, VideoOverlayDesc.sBottom, MSYS_PRIORITY_HIGHEST,
|
||||
CURSOR_NORMAL, MSYS_NO_CALLBACK, QuoteOverlayClickCallback );
|
||||
// Add region
|
||||
MSYS_AddRegion( &( gCivQuoteData.MouseRegion ) );
|
||||
|
||||
gCivQuoteData.bActive = TRUE;
|
||||
|
||||
gCivQuoteData.uiTimeOfCreation = GetJA2Clock();
|
||||
|
||||
gCivQuoteData.uiDelayTime = FindDelayForString( gzCivQuote ) + 500;
|
||||
|
||||
gCivQuoteData.pCiv = pCiv;
|
||||
}
|
||||
|
||||
UINT16 DetermineCivQuoteEntry( SOLDIERTYPE *pCiv, UINT16 *pubCivHintToUse, BOOLEAN fCanUseHints )
|
||||
{
|
||||
UINT8 ubCivType;
|
||||
@@ -878,7 +958,6 @@ void HandleCivQuote( )
|
||||
void StartCivQuote( SOLDIERTYPE *pCiv )
|
||||
{
|
||||
UINT16 ubCivQuoteID;
|
||||
INT16 sX, sY;
|
||||
UINT16 ubEntryID = 0;
|
||||
INT16 sScreenX, sScreenY;
|
||||
UINT16 ubCivHintToUse;
|
||||
@@ -975,17 +1054,15 @@ void StartCivQuote( SOLDIERTYPE *pCiv )
|
||||
// Determine location...
|
||||
// Get location of civ on screen.....
|
||||
GetSoldierScreenPos( pCiv, &sScreenX, &sScreenY );
|
||||
sX = sScreenX;
|
||||
sY = sScreenY;
|
||||
|
||||
// begin quote
|
||||
BeginCivQuote( pCiv, ubCivQuoteID, ubEntryID, sX, sY );
|
||||
BeginCivQuote( pCiv, ubCivQuoteID, ubEntryID, sScreenX, sScreenY );
|
||||
|
||||
// Increment use
|
||||
if ( ubCivQuoteID != CIV_QUOTE_HINT )
|
||||
{
|
||||
//pCiv->bCurrentCivQuoteDelta++;
|
||||
CivQuoteDelta++;
|
||||
++CivQuoteDelta;
|
||||
/*
|
||||
if ( pCiv->bCurrentCivQuoteDelta == 2 )
|
||||
{
|
||||
@@ -2010,4 +2087,9 @@ void ShowTauntPopupBox( SOLDIERTYPE *pCiv, STR16 gzTauntQuote )
|
||||
gCivQuoteData.uiDelayTime = min( gTauntsSettings.sMaxDelay , max( gTauntsSettings.sMinDelay, FindDelayForString( gzTauntQuote ) + gTauntsSettings.sModDelay ) );
|
||||
|
||||
gCivQuoteData.pCiv = pCiv;
|
||||
}
|
||||
}
|
||||
|
||||
BOOLEAN CivQuoteActive()
|
||||
{
|
||||
return gCivQuoteData.bActive;
|
||||
}
|
||||
|
||||
@@ -172,5 +172,8 @@ BOOLEAN LoadCivQuotesFromLoadGameFile( HWFILE hFile );
|
||||
BOOLEAN ShutDownQuoteBoxIfActive( );
|
||||
|
||||
void BeginCivQuote( SOLDIERTYPE *pCiv, UINT16 ubCivQuoteID, UINT16 ubEntryID, INT16 sX, INT16 sY );
|
||||
void BeginChatQuote( SOLDIERTYPE *pCiv, INT16 sX, INT16 sY );
|
||||
|
||||
BOOLEAN CivQuoteActive();
|
||||
|
||||
#endif
|
||||
+85
-1
@@ -10672,6 +10672,32 @@ void PrisonerSurrenderMessageBoxCallBack( UINT8 ubExitValue )
|
||||
ScreenMsg( FONT_MCOLOR_LTYELLOW, MSG_INTERFACE, szPrisonerTextStr[ STR_PRISONER_REFUSE_TAKE_PRISONERS ] );
|
||||
}
|
||||
}
|
||||
// we distract the enemy by essentially talking them to death
|
||||
else if ( ubExitValue == 3 )
|
||||
{
|
||||
// Flugente: if we are disguised and talk to a non-profile NPC, we will continue to 'chat' with the enemy as long as we aren't ordered to do something else.
|
||||
// This way we can easily order our spies to 'distract 'enemies'
|
||||
if ( GetSoldier( &pSoldier, gusSelectedSoldier ) &&
|
||||
pSoldier->bTeam == gbPlayerNum &&
|
||||
MercPtrs[prisonerdialoguetargetID] &&
|
||||
MercPtrs[prisonerdialoguetargetID]->bTeam == ENEMY_TEAM &&
|
||||
MercPtrs[prisonerdialoguetargetID]->ubProfile == NO_PROFILE &&
|
||||
MercPtrs[prisonerdialoguetargetID]->aiData.bAlertStatus < STATUS_RED &&
|
||||
!MercPtrs[prisonerdialoguetargetID]->RecognizeAsCombatant( gusSelectedSoldier ) )
|
||||
{
|
||||
// both soldiers face each other
|
||||
pSoldier->EVENT_SetSoldierDesiredDirection( GetDirectionToGridNoFromGridNo( pSoldier->sGridNo, MercPtrs[prisonerdialoguetargetID]->sGridNo ) );
|
||||
MercPtrs[prisonerdialoguetargetID]->EVENT_SetSoldierDesiredDirection( GetDirectionToGridNoFromGridNo( MercPtrs[prisonerdialoguetargetID]->sGridNo, pSoldier->sGridNo ) );
|
||||
|
||||
MercPtrs[prisonerdialoguetargetID]->usChatPartnerID = gusSelectedSoldier;
|
||||
pSoldier->usChatPartnerID = prisonerdialoguetargetID;
|
||||
}
|
||||
else
|
||||
{
|
||||
// normal dialog
|
||||
StartCivQuote( MercPtrs[prisonerdialoguetargetID] );
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
// normal dialog
|
||||
@@ -10681,6 +10707,50 @@ void PrisonerSurrenderMessageBoxCallBack( UINT8 ubExitValue )
|
||||
ReduceAttackBusyCount( );
|
||||
}
|
||||
|
||||
// Flugente: disguised mercs can distract enemies by talking to them. In order to display that, we sometimes display excerpts of their 'chats'
|
||||
void CheckChatPartners()
|
||||
{
|
||||
if ( guiCurrentScreen == GAME_SCREEN )
|
||||
{
|
||||
if ( !CivQuoteActive() )
|
||||
{
|
||||
static BOOLEAN fMercQuoteThisTime = TRUE;
|
||||
|
||||
SOLDIERTYPE* pSoldier = NULL;
|
||||
|
||||
for ( int ubLoop = gTacticalStatus.Team[gbPlayerNum].bFirstID; ubLoop <= gTacticalStatus.Team[gbPlayerNum].bLastID; ++ubLoop )
|
||||
{
|
||||
pSoldier = MercPtrs[ubLoop];
|
||||
|
||||
if ( pSoldier && pSoldier->bVisible && pSoldier->usChatPartnerID != NOBODY && MercPtrs[pSoldier->usChatPartnerID]->bVisible )
|
||||
{
|
||||
INT16 sScreenX, sScreenY;
|
||||
|
||||
if ( fMercQuoteThisTime )
|
||||
GetSoldierScreenPos( pSoldier, &sScreenX, &sScreenY );
|
||||
else
|
||||
GetSoldierScreenPos( MercPtrs[pSoldier->usChatPartnerID], &sScreenX, &sScreenY );
|
||||
|
||||
if ( gsVIEWPORT_START_X <= sScreenX &&
|
||||
gsVIEWPORT_END_X >= sScreenX &&
|
||||
gsVIEWPORT_WINDOW_START_Y <= sScreenY &&
|
||||
gsVIEWPORT_WINDOW_END_Y >= sScreenY )
|
||||
{
|
||||
if ( fMercQuoteThisTime )
|
||||
BeginChatQuote( pSoldier, sScreenX, sScreenY );
|
||||
else
|
||||
BeginChatQuote( MercPtrs[pSoldier->usChatPartnerID], sScreenX, sScreenY );
|
||||
|
||||
fMercQuoteThisTime = !fMercQuoteThisTime;
|
||||
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Flugente: offer the enemy the chance to surrender
|
||||
void HandleSurrenderOffer( SOLDIERTYPE* pSoldier )
|
||||
{
|
||||
@@ -10694,7 +10764,21 @@ void HandleSurrenderOffer( SOLDIERTYPE* pSoldier )
|
||||
// open a dialogue box and see wether we really want to offer this, or just talk
|
||||
wcscpy( gzUserDefinedButton[0], TacticalStr[ PRISONER_DEMAND_SURRENDER_STR ] );
|
||||
wcscpy( gzUserDefinedButton[1], TacticalStr[ PRISONER_OFFER_SURRENDER_STR ] );
|
||||
wcscpy( gzUserDefinedButton[2], TacticalStr[ PRISONER_TALK_STR ] );
|
||||
|
||||
SOLDIERTYPE* pTargetSoldier = NULL;
|
||||
if ( GetSoldier( &pTargetSoldier, prisonerdialoguetargetID ) &&
|
||||
pTargetSoldier->bTeam == ENEMY_TEAM &&
|
||||
pTargetSoldier->ubProfile == NO_PROFILE &&
|
||||
pTargetSoldier->aiData.bAlertStatus < STATUS_RED &&
|
||||
!pTargetSoldier->RecognizeAsCombatant( gusSelectedSoldier ) )
|
||||
{
|
||||
wcscpy( gzUserDefinedButton[2], TacticalStr[PRISONER_DISTRACT_STR] );
|
||||
}
|
||||
else
|
||||
{
|
||||
wcscpy( gzUserDefinedButton[2], TacticalStr[PRISONER_TALK_STR] );
|
||||
}
|
||||
|
||||
wcscpy( gzUserDefinedButton[3], TacticalStr[ PRISONER_TALK_STR ] );
|
||||
DoMessageBox( MSG_BOX_BASIC_MEDIUM_BUTTONS, TacticalStr[ PRISONER_OFFER_SURRENDER ], guiCurrentScreen, MSG_BOX_FLAG_GENERIC_FOUR_BUTTONS, PrisonerSurrenderMessageBoxCallBack, NULL );
|
||||
}
|
||||
|
||||
@@ -357,6 +357,9 @@ extern UINT8 NumZombiesInSector();
|
||||
// Flugente: offer the enemy the chance to surrender
|
||||
void HandleSurrenderOffer( SOLDIERTYPE* pSoldier );
|
||||
|
||||
// Flugente: disguised mercs can distract enemies by talking to them. In order to display that, we sometimes display excerpts of their 'chats'
|
||||
void CheckChatPartners();
|
||||
|
||||
// Flugente: order a team to drop gear, or pick it up
|
||||
// setting fForce to TRUE allows dropping of gear in combat (used in auto-resolve instances)
|
||||
void TeamDropAll(UINT8 bTeam, BOOLEAN fForce = FALSE);
|
||||
|
||||
@@ -923,6 +923,8 @@ void DeductPoints( SOLDIERTYPE *pSoldier, INT16 sAPCost, INT32 iBPCost, UINT8 ub
|
||||
// if we are temporarily overt
|
||||
if ( pSoldier->usSoldierFlagMask & SOLDIER_COVERT_TEMPORARY_OVERT && pSoldier->usSkillCooldown[SOLDIER_COOLDOWN_COVERTOPS_TEMPORARYOVERT_APS] > 0 )
|
||||
pSoldier->usSkillCooldown[SOLDIER_COOLDOWN_COVERTOPS_TEMPORARYOVERT_APS] = max( 0, (INT16)(pSoldier->usSkillCooldown[SOLDIER_COOLDOWN_COVERTOPS_TEMPORARYOVERT_APS] - sAPCost) );
|
||||
|
||||
pSoldier->StopChatting();
|
||||
}
|
||||
|
||||
// in real time, there IS no AP cost, (only breath cost)
|
||||
|
||||
@@ -19968,6 +19968,17 @@ FLOAT SOLDIERTYPE::GetIntelGain()
|
||||
return totalvalue;
|
||||
}
|
||||
|
||||
void SOLDIERTYPE::StopChatting()
|
||||
{
|
||||
if ( this->usChatPartnerID != NOBODY )
|
||||
{
|
||||
ScreenMsg( FONT_MCOLOR_LTYELLOW, MSG_INTERFACE, TacticalStr[DISTRACT_STOP_STR], this->GetName(), MercPtrs[this->usChatPartnerID]->GetName() );
|
||||
|
||||
MercPtrs[this->usChatPartnerID]->usChatPartnerID = NOBODY;
|
||||
this->usChatPartnerID = NOBODY;
|
||||
}
|
||||
}
|
||||
|
||||
INT32 CheckBleeding( SOLDIERTYPE *pSoldier )
|
||||
{
|
||||
INT8 bBandaged; //,savedOurTurn;
|
||||
|
||||
@@ -1506,7 +1506,7 @@ public:
|
||||
//INT16 bUnusedINT16_4;
|
||||
INT16 sDragCorpseID; // Flugente: id of corpse we are dragging
|
||||
|
||||
INT16 bUnusedINT16_5;
|
||||
UINT16 usChatPartnerID; // Flugente: the id of another merc we are 'chatting' with
|
||||
|
||||
// Flugente: new variables for extra stats
|
||||
INT16 bExtraStrength; // additional strength gained via power armor
|
||||
@@ -1979,6 +1979,8 @@ public:
|
||||
// Flugente: spy assignments
|
||||
UINT8 GetUncoverRisk();
|
||||
FLOAT GetIntelGain();
|
||||
|
||||
void StopChatting();
|
||||
//////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
}; // SOLDIERTYPE;
|
||||
|
||||
@@ -1318,6 +1318,20 @@ void TurnBasedHandleNPCAI(SOLDIERTYPE *pSoldier)
|
||||
EndAIGuysTurn( pSoldier);
|
||||
return;
|
||||
}
|
||||
|
||||
// Flugente: if we are distracted by chatting and not alert, do nothing
|
||||
if ( pSoldier->usChatPartnerID != NOBODY )
|
||||
{
|
||||
if ( pSoldier->aiData.bAlertStatus < STATUS_RED )
|
||||
{
|
||||
EndAIGuysTurn( pSoldier );
|
||||
return;
|
||||
}
|
||||
else
|
||||
{
|
||||
pSoldier->StopChatting();
|
||||
}
|
||||
}
|
||||
|
||||
if ((pSoldier->aiData.bAction != AI_ACTION_NONE) && pSoldier->aiData.bActionInProgress)
|
||||
{
|
||||
|
||||
@@ -76,6 +76,20 @@ void RTHandleAI( SOLDIERTYPE * pSoldier )
|
||||
if ( pSoldier->usSoldierFlagMask & SOLDIER_POW || pSoldier->usSkillCooldown[SOLDIER_COOLDOWN_CRYO] )
|
||||
return;
|
||||
|
||||
// Flugente: if we are distracted by chatting and not alert, do nothing
|
||||
if ( pSoldier->usChatPartnerID != NOBODY )
|
||||
{
|
||||
if ( pSoldier->aiData.bAlertStatus < STATUS_RED )
|
||||
{
|
||||
EndAIGuysTurn( pSoldier );
|
||||
return;
|
||||
}
|
||||
else
|
||||
{
|
||||
pSoldier->StopChatting();
|
||||
}
|
||||
}
|
||||
|
||||
// if man has nothing to do
|
||||
if (pSoldier->aiData.bAction == AI_ACTION_NONE)
|
||||
{
|
||||
|
||||
+7
-1
@@ -1106,8 +1106,9 @@ enum
|
||||
PRISONER_OFFER_SURRENDER,
|
||||
PRISONER_DEMAND_SURRENDER_STR,
|
||||
PRISONER_OFFER_SURRENDER_STR,
|
||||
PRISONER_DISTRACT_STR,
|
||||
PRISONER_TALK_STR,
|
||||
|
||||
|
||||
// sevenfm: new disarm trap dialog, new messages for wrong mines when arming
|
||||
DISARM_DIALOG_DISARM,
|
||||
DISARM_DIALOG_INSPECT,
|
||||
@@ -1142,6 +1143,8 @@ enum
|
||||
IMPROVEGEARDESCRIBE_STR,
|
||||
IMPROVEGEARPICKUPMAG_STR,
|
||||
|
||||
DISTRACT_STOP_STR,
|
||||
|
||||
TEXT_NUM_TACTICAL_STR
|
||||
};
|
||||
|
||||
@@ -3059,6 +3062,9 @@ extern STR16 szIntelWebsiteText[];
|
||||
|
||||
extern STR16 szIntelText[];
|
||||
|
||||
extern STR16 szChatTextSpy[];
|
||||
extern STR16 szChatTextEnemy[];
|
||||
|
||||
#define TACTICAL_INVENTORY_DIALOG_NUM 16
|
||||
#define TACTICAL_COVER_DIALOG_NUM 16
|
||||
|
||||
|
||||
@@ -4013,6 +4013,7 @@ CHAR16 TacticalStr[][ MED_STRING_LENGTH ] =
|
||||
L"你想要做什么?",
|
||||
L"劝说敌人投降",
|
||||
L"缴械投降", //L"Offer surrender",
|
||||
L"Distract", // TODO.Translate
|
||||
L"交谈",
|
||||
|
||||
// added by sevenfm: disarm messagebox options, messages when arming wrong bomb
|
||||
@@ -4048,6 +4049,8 @@ CHAR16 TacticalStr[][ MED_STRING_LENGTH ] =
|
||||
L"补充装备", //L"Improve gear",
|
||||
L"%s 将 %s 进行了临时补给", //L"%s changed %s for superior version",
|
||||
L"%s 捡起 %s", //L"%s picked up %s",
|
||||
|
||||
L"%s has stopped chatting with %s", // TODO.Translate
|
||||
};
|
||||
|
||||
//Varying helptext explains (for the "Go to Sector/Map" checkbox) what will happen given different circumstances in the "exiting sector" interface.
|
||||
|
||||
@@ -4014,6 +4014,7 @@ CHAR16 TacticalStr[][ MED_STRING_LENGTH ] =
|
||||
L"What do you want to do?",
|
||||
L"Demand surrender",
|
||||
L"Offer surrender",
|
||||
L"Distract", // TODO.Translate
|
||||
L"Talk",
|
||||
|
||||
// TODO.Translate
|
||||
@@ -4050,6 +4051,8 @@ CHAR16 TacticalStr[][ MED_STRING_LENGTH ] =
|
||||
L"Improve gear",
|
||||
L"%s changed %s for superior version",
|
||||
L"%s picked up %s", // TODO.Translate
|
||||
|
||||
L"%s has stopped chatting with %s", // TODO.Translate
|
||||
};
|
||||
|
||||
//Varying helptext explains (for the "Go to Sector/Map" checkbox) what will happen given different circumstances in the "exiting sector" interface.
|
||||
|
||||
@@ -4013,6 +4013,7 @@ CHAR16 TacticalStr[][ MED_STRING_LENGTH ] =
|
||||
L"What do you want to do?",
|
||||
L"Demand surrender",
|
||||
L"Offer surrender",
|
||||
L"Distract",
|
||||
L"Talk",
|
||||
|
||||
// added by sevenfm: disarm messagebox options, messages when arming wrong bomb
|
||||
@@ -4048,6 +4049,8 @@ CHAR16 TacticalStr[][ MED_STRING_LENGTH ] =
|
||||
L"Improve gear",
|
||||
L"%s changed %s for superior version",
|
||||
L"%s picked up %s",
|
||||
|
||||
L"%s has stopped chatting with %s",
|
||||
};
|
||||
|
||||
//Varying helptext explains (for the "Go to Sector/Map" checkbox) what will happen given different circumstances in the "exiting sector" interface.
|
||||
@@ -11362,4 +11365,70 @@ STR16 szIntelText[] =
|
||||
L"%s has been discovered, going to sector!",
|
||||
};
|
||||
|
||||
STR16 szChatTextSpy[] =
|
||||
{
|
||||
L"... so imagine my surprise when suddenly...",
|
||||
L"... and did I ever tell you the story of that one time...",
|
||||
L"... so, in conclusion, the colonel decided...",
|
||||
L"... tell you, they did not see that coming...",
|
||||
|
||||
L"... so, without further consideration...",
|
||||
L"... but then SHE said...",
|
||||
L"... and, speaking of llamas...",
|
||||
L"... there I was, in the middle of the dustbowl, when...",
|
||||
|
||||
L"... and let me tell, those things chafe...",
|
||||
L"... you should have seen his face...",
|
||||
L"... which wasn't the last of what we saw of them...",
|
||||
L"... which reminds me, my grandmother used to say...",
|
||||
|
||||
L"... who, by the way, is a total berk...",
|
||||
L"... also, the roots were off by a margin...",
|
||||
L"... and I was like, 'Back off, heathen!'...",
|
||||
L"... at that point the vicars were in oben rebellion...",
|
||||
|
||||
L"... not that I would've minded, you know, but...",
|
||||
L"... if not for that ridiculous hat...",
|
||||
L"... besides, it wasn't his favourite leg anyway...",
|
||||
L"... even though the ships were still watertight...",
|
||||
|
||||
L"... aside from the fact that giraffes can't do that...",
|
||||
L"... totally wasted that fork, mind you...",
|
||||
L"... and no bakery in sight. After that...",
|
||||
L"... even though regulations are clear in that regard...",
|
||||
};
|
||||
|
||||
STR16 szChatTextEnemy[] =
|
||||
{
|
||||
L"Whoa. I had no idea!",
|
||||
L"Really?",
|
||||
L"Uhhhh....",
|
||||
L"Well... you see, uhh...",
|
||||
|
||||
L"I am not entirely sure that...",
|
||||
L"I... well...",
|
||||
L"If I could just...",
|
||||
L"But...",
|
||||
|
||||
L"I don't mean to intrude, but...",
|
||||
L"Really? I had no idea!",
|
||||
L"What? All of it?",
|
||||
L"No way!",
|
||||
|
||||
L"Haha!",
|
||||
L"Whoa, the guys are not going to believe me!",
|
||||
L"... yeah, just...",
|
||||
L"That's just like the gypsy woman said!",
|
||||
|
||||
L"... yeah, is that why...",
|
||||
L"... hehe, talk about refurbishing...",
|
||||
L"... yeah, I guess...",
|
||||
L"Wait. What?",
|
||||
|
||||
L"... wouldn't have minded seeing that...",
|
||||
L"... now that you mention it...",
|
||||
L"... but where did all the chalk go...",
|
||||
L"... had never even considered that...",
|
||||
};
|
||||
|
||||
#endif //ENGLISH
|
||||
|
||||
@@ -4019,6 +4019,7 @@ CHAR16 TacticalStr[][ MED_STRING_LENGTH ] =
|
||||
L"Voulez-vous proposer ?",
|
||||
L"Leur reddition",
|
||||
L"Votre reddition",
|
||||
L"Distract", // TODO.Translate
|
||||
L"Parler",
|
||||
|
||||
// added by sevenfm: disarm messagebox options, messages when arming wrong bomb
|
||||
@@ -4054,6 +4055,8 @@ CHAR16 TacticalStr[][ MED_STRING_LENGTH ] =
|
||||
L"Improve gear",
|
||||
L"%s changed %s for superior version",
|
||||
L"%s picked up %s", // TODO.Translate
|
||||
|
||||
L"%s has stopped chatting with %s", // TODO.Translate
|
||||
};
|
||||
|
||||
//Varying helptext explains (for the "Go to Sector/Map" checkbox) what will happen given different circumstances in the "exiting sector" interface.
|
||||
|
||||
@@ -4021,6 +4021,7 @@ CHAR16 TacticalStr[][ MED_STRING_LENGTH ] =
|
||||
L"Was möchten Sie tun?",
|
||||
L"Kapitulation fordern",
|
||||
L"Kapitulation anbieten",
|
||||
L"Ablenken",
|
||||
L"Sprechen",
|
||||
|
||||
// added by sevenfm: disarm messagebox options, messages when arming wrong bomb
|
||||
@@ -4056,6 +4057,8 @@ CHAR16 TacticalStr[][ MED_STRING_LENGTH ] =
|
||||
L"Improve gear",
|
||||
L"%s changed %s for superior version",
|
||||
L"%s picked up %s", // TODO.Translate
|
||||
|
||||
L"%s has stopped chatting with %s", // TODO.Translate
|
||||
};
|
||||
|
||||
//Varying helptext explains (for the "Go to Sector/Map" checkbox) what will happen given different circumstances in the "exiting sector" interface.
|
||||
|
||||
@@ -4008,6 +4008,7 @@ CHAR16 TacticalStr[][ MED_STRING_LENGTH ] =
|
||||
L"What do you want to do?",
|
||||
L"Demand surrender",
|
||||
L"Offer surrender",
|
||||
L"Distract", // TODO.Translate
|
||||
L"Talk",
|
||||
|
||||
// TODO.Translate
|
||||
@@ -4044,6 +4045,8 @@ CHAR16 TacticalStr[][ MED_STRING_LENGTH ] =
|
||||
L"Improve gear",
|
||||
L"%s changed %s for superior version",
|
||||
L"%s picked up %s", // TODO.Translate
|
||||
|
||||
L"%s has stopped chatting with %s", // TODO.Translate
|
||||
};
|
||||
|
||||
//Varying helptext explains (for the "Go to Sector/Map" checkbox) what will happen given different circumstances in the "exiting sector" interface.
|
||||
|
||||
@@ -4019,6 +4019,7 @@ CHAR16 TacticalStr[][ MED_STRING_LENGTH ] =
|
||||
L"What do you want to do?",
|
||||
L"Demand surrender",
|
||||
L"Offer surrender",
|
||||
L"Distract", // TODO.Translate
|
||||
L"Talk",
|
||||
|
||||
// TODO.Translate
|
||||
@@ -4055,6 +4056,8 @@ CHAR16 TacticalStr[][ MED_STRING_LENGTH ] =
|
||||
L"Improve gear",
|
||||
L"%s changed %s for superior version",
|
||||
L"%s picked up %s", // TODO.Translate
|
||||
|
||||
L"%s has stopped chatting with %s", // TODO.Translate
|
||||
};
|
||||
|
||||
//Varying helptext explains (for the "Go to Sector/Map" checkbox) what will happen given different circumstances in the "exiting sector" interface.
|
||||
|
||||
@@ -4013,6 +4013,7 @@ CHAR16 TacticalStr[][ MED_STRING_LENGTH ] =
|
||||
L"Что вы хотите сделать?",
|
||||
L"Требовать сдаться",
|
||||
L"Предложить сдаться",
|
||||
L"Distract", // TODO.Translate
|
||||
L"Переговоры",
|
||||
|
||||
// added by sevenfm: disarm messagebox options, messages when arming wrong bomb
|
||||
@@ -4048,6 +4049,8 @@ CHAR16 TacticalStr[][ MED_STRING_LENGTH ] =
|
||||
L"Комплектовать",
|
||||
L"%s скомплевтовал %s",
|
||||
L"%s поднял %s",
|
||||
|
||||
L"%s has stopped chatting with %s", // TODO.Translate
|
||||
};
|
||||
|
||||
//Varying helptext explains (for the "Go to Sector/Map" checkbox) what will happen given different circumstances in the "exiting sector" interface.
|
||||
|
||||
@@ -30,6 +30,7 @@
|
||||
#include "Tactical Placement GUI.h"//dnl ch45 071009
|
||||
#include "Map Screen Interface Map Inventory.h"//dnl ch51 081009
|
||||
#include "World Items.h"//dnl ch77 191113
|
||||
#include "Overhead.h" // added by Flugente
|
||||
#endif
|
||||
|
||||
#include "SaveLoadScreen.h"
|
||||
@@ -410,6 +411,9 @@ void GameLoop(void)
|
||||
|
||||
// Flugente: dynamic opinions: Dialogue Boxes need to be refreshed
|
||||
RefreshBoxes( );
|
||||
|
||||
// Flugente:disguised mercs can distract enemies by talking to them. In order to display that, we sometimes display excerpts of their 'chats'
|
||||
CheckChatPartners();
|
||||
|
||||
//DEBUG MODE : DEBUG RENDER ENTRY : point to drop in debugging render code
|
||||
if( (gGameSettings.fOptions[TOPTION_RETAIN_DEBUG_OPTIONS_IN_RELEASE]) || (JA2BETAVERSION_FLAG))
|
||||
|
||||
Reference in New Issue
Block a user