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:
Flugente
2018-02-25 19:07:31 +00:00
parent c8e9a3fb8e
commit 3bbdd4a23a
22 changed files with 339 additions and 20 deletions
+9 -9
View File
@@ -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
View File
@@ -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
View File
@@ -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
View File
@@ -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;
}
+3
View File
@@ -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
View File
@@ -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 );
}
+3
View File
@@ -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);
+2
View File
@@ -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)
+11
View File
@@ -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;
+3 -1
View File
@@ -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;
+14
View File
@@ -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)
{
+14
View File
@@ -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
View File
@@ -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
+3
View File
@@ -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.
+3
View File
@@ -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.
+69
View File
@@ -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
+3
View File
@@ -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.
+3
View File
@@ -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.
+3
View File
@@ -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.
+3
View File
@@ -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.
+3
View File
@@ -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.
+4
View File
@@ -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))