From 98ff352eb036623292629c413916d3dfdc759efc Mon Sep 17 00:00:00 2001 From: Flugente Date: Fri, 3 Apr 2015 15:35:52 +0000 Subject: [PATCH] - added new dynamic opinion events, see http://thepit.ja-galaxy-forum.com/index.php?t=msg&th=21961&goto=333259&#msg_333259 - Fix: dynamic opinion events on finishing battle did not occur due to faulty sector coordinates - Fix: dynamic dialogue boxes were displayed with bad screen coordinates - Change: dynamic dialogue is also written into tactical log - Change: in events that require a leader, any merc can be considered leader, not just IMPs git-svn-id: https://ja2svn.mooo.com/source/ja2/trunk/GameSource/ja2_v1.13/Build@7807 3b4a5df2-a311-0410-b5c6-a8a6f20db521 --- GameSettings.cpp | 7 +- Laptop/CampaignStats.cpp | 8 +- Laptop/DynamicDialogueWidget.cpp | 6 +- Tactical/DynamicDialogue.cpp | 194 +++++++++++++++++++++++++++---- Tactical/DynamicDialogue.h | 57 +++++---- Tactical/Morale.cpp | 9 +- Tactical/Overhead.cpp | 4 + Tactical/Soldier Ani.cpp | 17 +++ Utils/Text.h | 4 +- Utils/_ChineseText.cpp | 105 ++++++++++++++++- Utils/_DutchText.cpp | 105 ++++++++++++++++- Utils/_EnglishText.cpp | 105 ++++++++++++++++- Utils/_FrenchText.cpp | 105 ++++++++++++++++- Utils/_GermanText.cpp | 105 ++++++++++++++++- Utils/_ItalianText.cpp | 105 ++++++++++++++++- Utils/_PolishText.cpp | 105 ++++++++++++++++- Utils/_RussianText.cpp | 105 ++++++++++++++++- 17 files changed, 1072 insertions(+), 74 deletions(-) diff --git a/GameSettings.cpp b/GameSettings.cpp index 4e083281..b1a3881b 100644 --- a/GameSettings.cpp +++ b/GameSettings.cpp @@ -3584,7 +3584,7 @@ void LoadMoraleSettings() gDynamicOpinionEvent[OPINIONEVENT_ANNOYINGDISABILITY].sOpinionModifier = iniReader.ReadInteger( "Dynamic Opinion Modifiers Settings", "OPINIONEVENT_ANNOYINGDISABILITY", -2, -50, 0 ); gDynamicOpinionEvent[OPINIONEVENT_ADDICT].sOpinionModifier = iniReader.ReadInteger( "Dynamic Opinion Modifiers Settings", "OPINIONEVENT_ADDICT", -6, -50, 0 ); gDynamicOpinionEvent[OPINIONEVENT_THIEF].sOpinionModifier = iniReader.ReadInteger( "Dynamic Opinion Modifiers Settings", "OPINIONEVENT_THIEF", -5, -50, 0 ); - gDynamicOpinionEvent[OPINIONEVENT_WORSTCOMMANDEREVER].sOpinionModifier = iniReader.ReadInteger( "Dynamic Opinion Modifiers Settings", "OPINIONEVENT_WORSTCOMMANDEREVER", -7, -50, 0 ); + gDynamicOpinionEvent[OPINIONEVENT_WORSTCOMMANDEREVER].sOpinionModifier = iniReader.ReadInteger( "Dynamic Opinion Modifiers Settings", "OPINIONEVENT_WORSTCOMMANDEREVER", -9, -50, 0 ); gDynamicOpinionEvent[OPINIONEVENT_RICHGUY].sOpinionModifier = iniReader.ReadInteger( "Dynamic Opinion Modifiers Settings", "OPINIONEVENT_RICHGUY", -1, -50, 0 ); gDynamicOpinionEvent[OPINIONEVENT_BETTERGEAR].sOpinionModifier = iniReader.ReadInteger( "Dynamic Opinion Modifiers Settings", "OPINIONEVENT_BETTERGEAR", -2, -50, 0 ); gDynamicOpinionEvent[OPINIONEVENT_YOUMOUNTEDAGUNONMYBREASTS].sOpinionModifier = iniReader.ReadInteger( "Dynamic Opinion Modifiers Settings", "OPINIONEVENT_YOUMOUNTEDAGUNONMYBREASTS", -3, -50, 0 ); @@ -3606,6 +3606,11 @@ void LoadMoraleSettings() gDynamicOpinionEvent[OPINIONEVENT_BRUTAL_GOOD].sOpinionModifier = iniReader.ReadInteger( "Dynamic Opinion Modifiers Settings", "OPINIONEVENT_BRUTAL_GOOD", 1, 0, 50 ); gDynamicOpinionEvent[OPINIONEVENT_BRUTAL_BAD].sOpinionModifier = iniReader.ReadInteger( "Dynamic Opinion Modifiers Settings", "OPINIONEVENT_BRUTAL_BAD", -3, -50, 0 ); gDynamicOpinionEvent[OPINIONEVENT_TEACHER].sOpinionModifier = iniReader.ReadInteger( "Dynamic Opinion Modifiers Settings", "OPINIONEVENT_TEACHER", 1, 0, 50 ); + gDynamicOpinionEvent[OPINIONEVENT_BESTCOMMANDEREVER].sOpinionModifier = iniReader.ReadInteger( "Dynamic Opinion Modifiers Settings", "OPINIONEVENT_BESTCOMMANDEREVER", 8, 0, 50 ); + gDynamicOpinionEvent[OPINIONEVENT_BATTLE_SAVIOUR].sOpinionModifier = iniReader.ReadInteger( "Dynamic Opinion Modifiers Settings", "OPINIONEVENT_BATTLE_SAVIOUR", 6, 0, 50 ); + gDynamicOpinionEvent[OPINIONEVENT_FRAGTHIEF].sOpinionModifier = iniReader.ReadInteger( "Dynamic Opinion Modifiers Settings", "OPINIONEVENT_FRAGTHIEF", -2, -50, 0 ); + gDynamicOpinionEvent[OPINIONEVENT_BATTLE_ASSIST].sOpinionModifier = iniReader.ReadInteger( "Dynamic Opinion Modifiers Settings", "OPINIONEVENT_BATTLE_ASSIST", 1, 0, 50 ); + gDynamicOpinionEvent[OPINIONEVENT_BATTLE_TOOK_PRISONER].sOpinionModifier = iniReader.ReadInteger( "Dynamic Opinion Modifiers Settings", "OPINIONEVENT_BATTLE_TOOK_PRISONER", 3, 0, 50 ); } void LoadReputationSettings() diff --git a/Laptop/CampaignStats.cpp b/Laptop/CampaignStats.cpp index 579a161b..2d0a6523 100644 --- a/Laptop/CampaignStats.cpp +++ b/Laptop/CampaignStats.cpp @@ -713,10 +713,7 @@ void FinishIncident(INT16 sX, INT16 sY, INT8 sZ) } } } - - // dynamic opinions: if the playerside had a lot of losses, the mercs will blame one of their own - HandleDynamicOpinionBattleLosses(); - + // due to odd coding, we do not know when an incident starts // (checking for entering combat isn't enough, as we do that multiple times per battle) // we thus set the relevant data when finishing an incident @@ -732,6 +729,9 @@ void FinishIncident(INT16 sX, INT16 sY, INT8 sZ) if ( gCampaignStats.usHighestID == 1 ) gCurrentIncident.usOneTimeEventFlags |= INCIDENT_ONETIMEEVENT_OMERTA; + // dynamic opinions + HandleDynamicOpinionBattleFinished( (gCurrentIncident.usIncidentFlags & INCIDENT_WIN) != 0 ); + gCampaignStats.AddNewIncident(gCurrentIncident); // reset incident after adding it diff --git a/Laptop/DynamicDialogueWidget.cpp b/Laptop/DynamicDialogueWidget.cpp index 6a155073..57022e9d 100644 --- a/Laptop/DynamicDialogueWidget.cpp +++ b/Laptop/DynamicDialogueWidget.cpp @@ -57,7 +57,7 @@ DDBox::Init( UINT16 sX, UINT16 sY ) SetY( sY ); SetX_Text( GetX( ) + MYBOX_FACE_OFFSET ); - SetY_Text( GetY( ) ); + SetY_Text( WidgetBase::GetY( ) ); musWidth = min( MYBOX_TEXT_MAXWIDTH, StringPixLength( mText, MYBOX_FONT_DEF ) ); @@ -157,7 +157,7 @@ DDBox::Display( ) } //Display the background - ColorFillVideoSurfaceArea( FRAME_BUFFER, GetX_Text( ), GetY( ), GetX_Text( ) + musWidth, GetY( ) + musFontHeight, Get16BPPColor( FROMRGB( 0, 0, 0 ) ) ); + ColorFillVideoSurfaceArea( FRAME_BUFFER, GetX_Text( ), GetY_Text( ), GetX_Text( ) + musWidth, GetY_Text( ) + musFontHeight, Get16BPPColor( FROMRGB( 0, 0, 0 ) ) ); DrawTopEntry( ); @@ -420,7 +420,7 @@ IMPDialogueChooseBox::Init( UINT16 sX, UINT16 sY ) SetY( sY ); SetX_Text( GetX( ) + MYBOX_FACE_OFFSET ); - SetY_Text( GetY( ) ); + SetY_Text( WidgetBase::GetY( ) ); mSelectedEntry = 0; diff --git a/Tactical/DynamicDialogue.cpp b/Tactical/DynamicDialogue.cpp index aba50a27..3d9d7217 100644 --- a/Tactical/DynamicDialogue.cpp +++ b/Tactical/DynamicDialogue.cpp @@ -28,6 +28,7 @@ #include "strategicmap.h" #include "connect.h" #include "Campaign.h" +#include "Points.h" extern INT32 ReadFieldByField( HWFILE hFile, PTR pDest, UINT32 uiFieldSize, UINT32 uiElementSize, UINT32 uiCurByteCount ); @@ -1021,6 +1022,9 @@ BOOLEAN DynamicOpinionTacticalCharacterDialogue( DynamicOpinionSpeechEvent& aEve pDDBox->Create( sX, sY ); pDDBox->SetStartTime( aEvent.usStarttime ); + // print out the dialogue to the log, too + ScreenMsg( FONT_MCOLOR_LTYELLOW, MSG_INTERFACE, L"%s: %s", pSoldier->GetName(), gzQuoteStr ); + // delay destruction of all current boxes - as long as new dialogue comes in, they will be kept DelayBoxDestruction( aEvent.usStarttime + gGameExternalOptions.sDynamicDialogueTimeOffset * 3.5f ); @@ -1191,7 +1195,12 @@ void AddOpinionEvent( UINT8 usProfileA, UINT8 usProfileB, UINT8 usEvent, BOOLEAN case OPINIONEVENT_BRUTAL_BAD: gMercProfiles[usProfileA].usDynamicOpinionFlagmask[usProfileB][4] |= OPINIONFLAG_STAGE1_BRUTAL_BAD; break; case OPINIONEVENT_TEACHER: gMercProfiles[usProfileA].usDynamicOpinionFlagmask[usProfileB][4] |= OPINIONFLAG_STAGE1_TEACHER; break; - + case OPINIONEVENT_BESTCOMMANDEREVER: gMercProfiles[usProfileA].usDynamicOpinionFlagmask[usProfileB][4] |= OPINIONFLAG_STAGE1_BESTCOMMANDEREVER; break; + case OPINIONEVENT_BATTLE_SAVIOUR: gMercProfiles[usProfileA].usDynamicOpinionFlagmask[usProfileB][4] |= OPINIONFLAG_STAGE1_BATTLE_SAVIOUR; break; + case OPINIONEVENT_FRAGTHIEF: gMercProfiles[usProfileA].usDynamicOpinionFlagmask[usProfileB][4] |= OPINIONFLAG_STAGE1_FRAGTHIEF; break; + case OPINIONEVENT_BATTLE_ASSIST: gMercProfiles[usProfileA].usDynamicOpinionFlagmask[usProfileB][4] |= OPINIONFLAG_STAGE1_BATTLE_ASSIST; break; + case OPINIONEVENT_BATTLE_TOOK_PRISONER: gMercProfiles[usProfileA].usDynamicOpinionFlagmask[usProfileB][4] |= OPINIONFLAG_STAGE1_BATTLE_TOOK_PRISONER; break; + default: break; } @@ -1521,6 +1530,41 @@ INT8 GetDynamicOpinion( UINT8 usProfileA, UINT8 usProfileB, UINT8 usEvent ) if ( gMercProfiles[usProfileA].usDynamicOpinionFlagmask[usProfileB][4] & OPINIONFLAG_STAGE3_TEACHER ) ++numflags; if ( gMercProfiles[usProfileA].usDynamicOpinionFlagmask[usProfileB][4] & OPINIONFLAG_STAGE4_TEACHER ) ++numflags; break; + + case OPINIONEVENT_BESTCOMMANDEREVER: + if ( gMercProfiles[usProfileA].usDynamicOpinionFlagmask[usProfileB][4] & OPINIONFLAG_STAGE1_BESTCOMMANDEREVER ) ++numflags; + if ( gMercProfiles[usProfileA].usDynamicOpinionFlagmask[usProfileB][4] & OPINIONFLAG_STAGE2_BESTCOMMANDEREVER ) ++numflags; + if ( gMercProfiles[usProfileA].usDynamicOpinionFlagmask[usProfileB][4] & OPINIONFLAG_STAGE3_BESTCOMMANDEREVER ) ++numflags; + if ( gMercProfiles[usProfileA].usDynamicOpinionFlagmask[usProfileB][4] & OPINIONFLAG_STAGE4_BESTCOMMANDEREVER ) ++numflags; + break; + + case OPINIONEVENT_BATTLE_SAVIOUR: + if ( gMercProfiles[usProfileA].usDynamicOpinionFlagmask[usProfileB][4] & OPINIONFLAG_STAGE1_BATTLE_SAVIOUR ) ++numflags; + if ( gMercProfiles[usProfileA].usDynamicOpinionFlagmask[usProfileB][4] & OPINIONFLAG_STAGE2_BATTLE_SAVIOUR ) ++numflags; + if ( gMercProfiles[usProfileA].usDynamicOpinionFlagmask[usProfileB][4] & OPINIONFLAG_STAGE3_BATTLE_SAVIOUR ) ++numflags; + if ( gMercProfiles[usProfileA].usDynamicOpinionFlagmask[usProfileB][4] & OPINIONFLAG_STAGE4_BATTLE_SAVIOUR ) ++numflags; + break; + + case OPINIONEVENT_FRAGTHIEF: + if ( gMercProfiles[usProfileA].usDynamicOpinionFlagmask[usProfileB][4] & OPINIONFLAG_STAGE1_FRAGTHIEF ) ++numflags; + if ( gMercProfiles[usProfileA].usDynamicOpinionFlagmask[usProfileB][4] & OPINIONFLAG_STAGE2_FRAGTHIEF ) ++numflags; + if ( gMercProfiles[usProfileA].usDynamicOpinionFlagmask[usProfileB][4] & OPINIONFLAG_STAGE3_FRAGTHIEF ) ++numflags; + if ( gMercProfiles[usProfileA].usDynamicOpinionFlagmask[usProfileB][4] & OPINIONFLAG_STAGE4_FRAGTHIEF ) ++numflags; + break; + + case OPINIONEVENT_BATTLE_ASSIST: + if ( gMercProfiles[usProfileA].usDynamicOpinionFlagmask[usProfileB][4] & OPINIONFLAG_STAGE1_BATTLE_ASSIST ) ++numflags; + if ( gMercProfiles[usProfileA].usDynamicOpinionFlagmask[usProfileB][4] & OPINIONFLAG_STAGE2_BATTLE_ASSIST ) ++numflags; + if ( gMercProfiles[usProfileA].usDynamicOpinionFlagmask[usProfileB][4] & OPINIONFLAG_STAGE3_BATTLE_ASSIST ) ++numflags; + if ( gMercProfiles[usProfileA].usDynamicOpinionFlagmask[usProfileB][4] & OPINIONFLAG_STAGE4_BATTLE_ASSIST ) ++numflags; + break; + + case OPINIONEVENT_BATTLE_TOOK_PRISONER: + if ( gMercProfiles[usProfileA].usDynamicOpinionFlagmask[usProfileB][4] & OPINIONFLAG_STAGE1_BATTLE_TOOK_PRISONER ) ++numflags; + if ( gMercProfiles[usProfileA].usDynamicOpinionFlagmask[usProfileB][4] & OPINIONFLAG_STAGE2_BATTLE_TOOK_PRISONER ) ++numflags; + if ( gMercProfiles[usProfileA].usDynamicOpinionFlagmask[usProfileB][4] & OPINIONFLAG_STAGE3_BATTLE_TOOK_PRISONER ) ++numflags; + if ( gMercProfiles[usProfileA].usDynamicOpinionFlagmask[usProfileB][4] & OPINIONFLAG_STAGE4_BATTLE_TOOK_PRISONER ) ++numflags; + break; default: break; @@ -1699,27 +1743,51 @@ void HandleDynamicOpinionOnContractExtension( UINT8 ubCode, UINT8 usProfile ) } } -void HandleDynamicOpinionBattleLosses( ) +// depending on what happened in the battle, our mercs might complain or celebrate +void HandleDynamicOpinionBattleFinished( BOOLEAN fBattleWon ) { - UINT32 badstuff = 0; + UINT32 ourlosses = 0; + UINT32 enemylosses = 0; + UINT32 oursidesize = 0; + UINT32 enemysidesize = 0; + + // pick the 'leader' who gets all the praise (or blame, depending on how this went) + UINT8 leaderid = GetBestMercLeaderInSector( SECTORX( gCurrentIncident.usSector ), SECTORY( gCurrentIncident.usSector ), (INT8)gCurrentIncident.usLevel ); - for ( UINT16 i = 0; i < CAMPAIGNHISTORY_SD_CIV; ++i ) + if ( leaderid != NOBODY ) { - badstuff += 5 * gCurrentIncident.usKills[i]; - badstuff += gCurrentIncident.usWounds[i]; - badstuff += 4 * gCurrentIncident.usPrisoners[i]; - } - - if ( badstuff > 100 ) - { - // This was a disaster (Ignoring of how high the enemies losses were to create drama :-) )! Let's blame the player -> blame an IMP! - std::vector aTaboo; - UINT8 impid = GetRandomMercInSectorNotInList( SECTORX( gCurrentIncident.usSector ), SECTORY( gCurrentIncident.usSector ), (INT8)gCurrentIncident.usLevel, aTaboo, TRUE ); - - // we've found someone competent. Let's all blame him for this disaster! - if ( impid != NOBODY ) + // while it would be logical to also take civilian losses into account, this would lead to mercs always disapproving engaging hostile civilain factions like Kingpin and the Hicks + for ( UINT16 i = 0; i < CAMPAIGNHISTORY_SD_CIV; ++i ) { - HandleDynamicOpinionChange( MercPtrs[impid], OPINIONEVENT_WORSTCOMMANDEREVER, TRUE, TRUE ); + ourlosses += 10 * gCurrentIncident.usKills[i]; + ourlosses += gCurrentIncident.usWounds[i]; + ourlosses += 8 * gCurrentIncident.usPrisoners[i]; // having our side being captured is not quite as bad as having them killed + + oursidesize += gCurrentIncident.usParticipants[i]; + } + + for ( UINT16 i = CAMPAIGNHISTORY_SD_ENEMY_ADMIN; i < CAMPAIGNHISTORY_SD_MAX; ++i ) + { + enemylosses += 10 * gCurrentIncident.usKills[i]; + enemylosses += gCurrentIncident.usWounds[i]; + enemylosses += 12 * gCurrentIncident.usPrisoners[i]; // capturing the enemy is even better than killing them + + enemysidesize += gCurrentIncident.usParticipants[i]; + } + + // complains only happen if there was a significant battle + if ( ourlosses > 100 || enemylosses > 100 ) + { + // if we've taken more losses than the enemy, our mercs will complain - even if we won. Our mercs don't seem to like phyrric victories... + if ( ourlosses > enemylosses ) + { + HandleDynamicOpinionChange( MercPtrs[leaderid], OPINIONEVENT_WORSTCOMMANDEREVER, TRUE, TRUE ); + } + // if we won with our losses significantly lower than the enemies', while the enemy vastly outnumbered us, our mercs will be quite happy + else if ( fBattleWon && oursidesize < 2 * enemysidesize && 4 * ourlosses < enemylosses ) + { + HandleDynamicOpinionChange( MercPtrs[leaderid], OPINIONEVENT_BESTCOMMANDEREVER, TRUE, TRUE ); + } } } } @@ -1728,7 +1796,7 @@ void HandleDynamicOpinionRetreat( ) { // This was a disaster (Ignoring of how high the enemies losses were to create drama :-) )! Let's blame the player -> blame an IMP! std::vector aTaboo; - UINT8 impid = GetRandomMercInSectorNotInList( gWorldSectorX, gWorldSectorY, gbWorldSectorZ, aTaboo, TRUE ); + UINT8 impid = GetBestMercLeaderInSector( gWorldSectorX, gWorldSectorY, gbWorldSectorZ ); // we've found someone competent. Let's all blame him for this disaster! if ( impid != NOBODY ) @@ -1814,14 +1882,59 @@ void HandleDynamicOpinionTeaching( SOLDIERTYPE* pSoldier, UINT8 ubStat ) } } +// some events require a 'leader' - merc the team will regard as the one being in charge, and subsequently being praised or damned for the way things develop +UINT32 GetSoldierLeaderRating( SOLDIERTYPE* pSoldier ) +{ + if ( !pSoldier ) + return 0; + + // rating is based on leadership, experience and the squad leader trait. IMPs get a higher rating, as they represent the player closest + UINT32 rating = 0; + + rating += pSoldier->stats.bLeadership; + rating += 10 * pSoldier->stats.bExpLevel; + rating += 30 * NUM_SKILL_TRAITS( pSoldier, SQUADLEADER_NT ); + rating += 50 * (pSoldier->ubWhatKindOfMercAmI == MERC_TYPE__PLAYER_CHARACTER); + + return rating; +} + + +UINT8 GetBestMercLeaderInSector( INT16 sX, INT16 sY, INT8 sZ ) +{ + UINT32 highestrating = 0; + UINT8 bestid = NOBODY; + + SOLDIERTYPE* pSoldier = NULL; + UINT16 bMercID = gTacticalStatus.Team[gbPlayerNum].bFirstID; + UINT16 bLastTeamID = gTacticalStatus.Team[gbPlayerNum].bLastID; + for ( pSoldier = MercPtrs[bMercID]; bMercID <= bLastTeamID; ++bMercID, ++pSoldier ) + { + // everybody other merc in the same sector gets annoyed + if ( pSoldier->bActive && pSoldier->ubProfile != NO_PROFILE && + pSoldier->sSectorX == sX && pSoldier->sSectorY == sY && pSoldier->bSectorZ == sZ && + !(pSoldier->bAssignment == IN_TRANSIT || pSoldier->bAssignment == ASSIGNMENT_DEAD) ) + { + UINT32 rating = GetSoldierLeaderRating( pSoldier ); + + if ( rating > highestrating ) + { + highestrating = rating; + bestid = bMercID; + } + } + } + + return bestid; +} UINT8 GetRandomMercInSectorNotInList( INT16 sX, INT16 sY, INT8 sZ, std::vector aTaboo, BOOLEAN fImpOnly ) { - std::vector resultvector; + std::vector resultvector; SOLDIERTYPE* pTeamSoldier = NULL; UINT16 bMercID = gTacticalStatus.Team[gbPlayerNum].bFirstID; UINT16 bLastTeamID = gTacticalStatus.Team[gbPlayerNum].bLastID; - for ( pTeamSoldier = MercPtrs[bMercID]; bMercID <= bLastTeamID; ++bMercID, pTeamSoldier++ ) + for ( pTeamSoldier = MercPtrs[bMercID]; bMercID <= bLastTeamID; ++bMercID, ++pTeamSoldier ) { // everybody other merc in the same sector gets annoyed if ( pTeamSoldier->bActive && pTeamSoldier->ubProfile != NO_PROFILE && @@ -1832,7 +1945,7 @@ UINT8 GetRandomMercInSectorNotInList( INT16 sX, INT16 sY, INT8 sZ, std::vectorubProfile ) == aTaboo.end( ) ) - resultvector.push_back( pTeamSoldier->ubProfile ); + resultvector.push_back( bMercID ); } } @@ -1841,7 +1954,7 @@ UINT8 GetRandomMercInSectorNotInList( INT16 sX, INT16 sY, INT8 sZ, std::vectorubTargetID == pSoldier->ubTargetID && pTeamSoldier->sTargetGridNo == pSoldier->sTargetGridNo ) + { + // are we ambitious enough to care about kill counts? + if ( gMercProfiles[pTeamSoldier->ubProfile].bCharacterTrait == CHAR_TRAIT_ASSERTIVE || gMercProfiles[pTeamSoldier->ubProfile].bCharacterTrait == CHAR_TRAIT_SHOWOFF ) + { + // did we have enough AP to claim we were about to finish them? + if ( !EnoughPoints( pTeamSoldier, 60, 0, FALSE ) ) + continue; + } + else + { + // we are grateful for the assistance instead + usEventUsed = OPINIONEVENT_BATTLE_ASSIST; + } + } + else + continue; + break; + case OPINIONEVENT_BATTLE_TOOK_PRISONER: + // we only care if we prefer the enemy to be taken alive + if ( !(gMercProfiles[pTeamSoldier->ubProfile].ubMiscFlags3 & PROFILE_MISC_FLAG3_GOODGUY || + gMercProfiles[pTeamSoldier->ubProfile].bCharacterTrait == CHAR_TRAIT_INTELLECTUAL || + gMercProfiles[pTeamSoldier->ubProfile].bCharacterTrait == CHAR_TRAIT_PACIFIST) ) + continue; break; default: diff --git a/Tactical/DynamicDialogue.h b/Tactical/DynamicDialogue.h index cc257b66..513509bd 100644 --- a/Tactical/DynamicDialogue.h +++ b/Tactical/DynamicDialogue.h @@ -60,6 +60,12 @@ enum OPINIONEVENT_BRUTAL_BAD, // other guy killed someone in a brutal fashion, and we dislike that OPINIONEVENT_TEACHER, // other guy taught us and we are grateful + OPINIONEVENT_BESTCOMMANDEREVER, // we won a battle through what must be magnificent leadership + OPINIONEVENT_BATTLE_SAVIOUR, // other guy saved us in a firefight + + OPINIONEVENT_FRAGTHIEF, // other guy stole our kill + OPINIONEVENT_BATTLE_ASSIST, // other guy assisted us in battle + OPINIONEVENT_BATTLE_TOOK_PRISONER, // other guy chose to take prisoners instead of killing the enemy OPINIONEVENT_MAX }; @@ -255,32 +261,32 @@ extern DynamicOpinionEvent gDynamicOpinionEvent[OPINIONEVENT_MAX]; #define OPINIONFLAG_STAGE3_TEACHER 0x00000040 //64 #define OPINIONFLAG_STAGE4_TEACHER 0x00000080 //128 -/*#define OPINIONFLAG_STAGE1_SOLVECONFLICT_REASON_BAD 0x00000100 //256 // attempted to solve the conflict reasonably, and we thought that was bad -#define OPINIONFLAG_STAGE2_SOLVECONFLICT_REASON_BAD 0x00000200 //512 -#define OPINIONFLAG_STAGE3_SOLVECONFLICT_REASON_BAD 0x00000400 //1024 -#define OPINIONFLAG_STAGE4_SOLVECONFLICT_REASON_BAD 0x00000800 //2048 +#define OPINIONFLAG_STAGE1_BESTCOMMANDEREVER 0x00000100 //256 // this guy lead our team to a magnificent victory +#define OPINIONFLAG_STAGE2_BESTCOMMANDEREVER 0x00000200 //512 +#define OPINIONFLAG_STAGE3_BESTCOMMANDEREVER 0x00000400 //1024 +#define OPINIONFLAG_STAGE4_BESTCOMMANDEREVER 0x00000800 //2048 -#define OPINIONFLAG_STAGE1_SOLVECONFLICT_AGGRESSIVE_GOOD 0x00001000 //4096 // attempted to solve the conflict agressively, and we thought that was good -#define OPINIONFLAG_STAGE2_SOLVECONFLICT_AGGRESSIVE_GOOD 0x00002000 //8192 -#define OPINIONFLAG_STAGE3_SOLVECONFLICT_AGGRESSIVE_GOOD 0x00004000 //16384 -#define OPINIONFLAG_STAGE4_SOLVECONFLICT_AGGRESSIVE_GOOD 0x00008000 //32768 +#define OPINIONFLAG_STAGE1_BATTLE_SAVIOUR 0x00001000 //4096 // other guy saved us in a firefight +#define OPINIONFLAG_STAGE2_BATTLE_SAVIOUR 0x00002000 //8192 +#define OPINIONFLAG_STAGE3_BATTLE_SAVIOUR 0x00004000 //16384 +#define OPINIONFLAG_STAGE4_BATTLE_SAVIOUR 0x00008000 //32768 -#define OPINIONFLAG_STAGE1_SOLVECONFLICT_AGGRESSIVE_BAD 0x00010000 //65536 // attempted to solve the conflict agressively, and we thought that was bad -#define OPINIONFLAG_STAGE2_SOLVECONFLICT_AGGRESSIVE_BAD 0x00020000 //131072 -#define OPINIONFLAG_STAGE3_SOLVECONFLICT_AGGRESSIVE_BAD 0x00040000 //262144 -#define OPINIONFLAG_STAGE4_SOLVECONFLICT_AGGRESSIVE_BAD 0x00080000 //524288 +#define OPINIONFLAG_STAGE1_FRAGTHIEF 0x00010000 //65536 // other guy stole our kill +#define OPINIONFLAG_STAGE2_FRAGTHIEF 0x00020000 //131072 +#define OPINIONFLAG_STAGE3_FRAGTHIEF 0x00040000 //262144 +#define OPINIONFLAG_STAGE4_FRAGTHIEF 0x00080000 //524288 -#define OPINIONFLAG_STAGE1_DISEASE_DISGUSTING 0x00100000 //1048576 // is diseased, which we find disgusting -#define OPINIONFLAG_STAGE2_DISEASE_DISGUSTING 0x00200000 //2097152 -#define OPINIONFLAG_STAGE3_DISEASE_DISGUSTING 0x00400000 //4194304 -#define OPINIONFLAG_STAGE4_DISEASE_DISGUSTING 0x00800000 //8388608 +#define OPINIONFLAG_STAGE1_BATTLE_ASSIST 0x00100000 //1048576 // other guy assisted us in battle +#define OPINIONFLAG_STAGE2_BATTLE_ASSIST 0x00200000 //2097152 +#define OPINIONFLAG_STAGE3_BATTLE_ASSIST 0x00400000 //4194304 +#define OPINIONFLAG_STAGE4_BATTLE_ASSIST 0x00800000 //8388608 -#define OPINIONFLAG_STAGE1_DISEASE_TREATMENT 0x01000000 //16777216 // treated our disease, which we like -#define OPINIONFLAG_STAGE2_DISEASE_TREATMENT 0x02000000 //33554432 -#define OPINIONFLAG_STAGE3_DISEASE_TREATMENT 0x04000000 //67108864 -#define OPINIONFLAG_STAGE4_DISEASE_TREATMENT 0x08000000 //134217728 +#define OPINIONFLAG_STAGE1_BATTLE_TOOK_PRISONER 0x01000000 //16777216 // other guy chose to take prisoners instead of killing the enemy +#define OPINIONFLAG_STAGE2_BATTLE_TOOK_PRISONER 0x02000000 //33554432 +#define OPINIONFLAG_STAGE3_BATTLE_TOOK_PRISONER 0x04000000 //67108864 +#define OPINIONFLAG_STAGE4_BATTLE_TOOK_PRISONER 0x08000000 //134217728 -#define OPINIONFLAG_STAGE1_BRUTAL_GOOD 0x10000000 //268435456 // other guy killed someone in a brutal fashion, and we like that +/*#define OPINIONFLAG_STAGE1_BRUTAL_GOOD 0x10000000 //268435456 // other guy killed someone in a brutal fashion, and we like that #define OPINIONFLAG_STAGE2_BRUTAL_GOOD 0x20000000 //536870912 #define OPINIONFLAG_STAGE3_BRUTAL_GOOD 0x40000000 //1073741824 #define OPINIONFLAG_STAGE4_BRUTAL_GOOD 0x80000000 //2147483648*/ @@ -463,11 +469,18 @@ void RolloverDynamicOpinions( UINT8 usProfileA ); void CheckForFriendsofHated( SOLDIERTYPE* pSoldier ); void HandleDynamicOpinionOnContractExtension( UINT8 ubCode, UINT8 usProfile ); -void HandleDynamicOpinionBattleLosses( ); + +// depending on what happened in the battle, our mercs might complain or celebrate +void HandleDynamicOpinionBattleFinished( BOOLEAN fBattleWon ); void HandleDynamicOpinionRetreat( ); void HandleDynamicOpinionTeamDrinking( SOLDIERTYPE* pSoldier ); void HandleDynamicOpinionTeaching( SOLDIERTYPE* pSoldier, UINT8 ubStat ); +// some events require a 'leader' - merc the team will regard as the one being in charge, and subsequently being praised or damned for the way things develop +UINT32 GetSoldierLeaderRating( SOLDIERTYPE* pSoldier ); + +UINT8 GetBestMercLeaderInSector( INT16 sX, INT16 sY, INT8 sZ ); + // get id of a random merc in a sector, provided one exists UINT8 GetRandomMercInSectorNotInList( INT16 sX, INT16 sY, INT8 sZ, std::vector aTaboo, BOOLEAN fImpOnly ); diff --git a/Tactical/Morale.cpp b/Tactical/Morale.cpp index d9e46167..76675b31 100644 --- a/Tactical/Morale.cpp +++ b/Tactical/Morale.cpp @@ -128,7 +128,7 @@ DynamicOpinionEvent gDynamicOpinionEvent[OPINIONEVENT_MAX] = { OPINIONEVENT_ANNOYINGDISABILITY, -2, TRUE, FALSE, TRUE, FALSE }, { OPINIONEVENT_ADDICT, -6, TRUE, FALSE, TRUE, FALSE }, { OPINIONEVENT_THIEF, -5, TRUE, FALSE, TRUE, FALSE }, - { OPINIONEVENT_WORSTCOMMANDEREVER, -7, TRUE, FALSE, FALSE, TRUE }, + { OPINIONEVENT_WORSTCOMMANDEREVER, -9, TRUE, FALSE, FALSE, TRUE }, { OPINIONEVENT_RICHGUY, -1, FALSE, FALSE, FALSE, FALSE }, { OPINIONEVENT_BETTERGEAR, -2, TRUE, FALSE, FALSE, TRUE }, { OPINIONEVENT_YOUMOUNTEDAGUNONMYBREASTS, -3, TRUE, FALSE, FALSE, TRUE }, @@ -149,7 +149,12 @@ DynamicOpinionEvent gDynamicOpinionEvent[OPINIONEVENT_MAX] = {OPINIONEVENT_DISEASE_TREATMENT, 1, TRUE, FALSE, TRUE, FALSE}, {OPINIONEVENT_BRUTAL_GOOD, 1, TRUE, FALSE, TRUE, FALSE}, {OPINIONEVENT_BRUTAL_BAD, -2, TRUE, FALSE, TRUE, FALSE}, - {OPINIONEVENT_TEACHER, 1, TRUE, FALSE, FALSE, FALSE} + {OPINIONEVENT_TEACHER, 1, TRUE, FALSE, FALSE, FALSE}, + { OPINIONEVENT_BESTCOMMANDEREVER, 8, TRUE, FALSE, FALSE, TRUE }, + { OPINIONEVENT_BATTLE_SAVIOUR, 6, TRUE, FALSE, FALSE, TRUE}, + { OPINIONEVENT_FRAGTHIEF, -2, TRUE, FALSE, FALSE, TRUE}, + { OPINIONEVENT_BATTLE_ASSIST, -1, TRUE, FALSE, FALSE, TRUE}, + { OPINIONEVENT_BATTLE_TOOK_PRISONER, 3, TRUE, FALSE, FALSE, TRUE} }; BOOLEAN gfSomeoneSaidMoraleQuote = FALSE; diff --git a/Tactical/Overhead.cpp b/Tactical/Overhead.cpp index a4128e6c..7701ce6c 100644 --- a/Tactical/Overhead.cpp +++ b/Tactical/Overhead.cpp @@ -10544,6 +10544,10 @@ void PrisonerSurrenderMessageBoxCallBack( UINT8 ubExitValue ) } } } + + // dynamic opinion: a merc caused the remaining enemies to give up + if ( gusSelectedSoldier != NOBODY ) + HandleDynamicOpinionChange( MercPtrs[gusSelectedSoldier], OPINIONEVENT_BATTLE_TOOK_PRISONER, TRUE, TRUE ); } else { diff --git a/Tactical/Soldier Ani.cpp b/Tactical/Soldier Ani.cpp index b7c25a2d..80dd40e7 100644 --- a/Tactical/Soldier Ani.cpp +++ b/Tactical/Soldier Ani.cpp @@ -3961,6 +3961,23 @@ BOOLEAN HandleSoldierDeath( SOLDIERTYPE *pSoldier , BOOLEAN *pfMadeCorpse ) //gMercProfiles[ MercPtrs[ pSoldier->ubAttackerID ]->ubProfile ].usKills++; ///////////////////////////////////////////////////////////////////////////////////// gStrategicStatus.usPlayerKills++; + + // Flugente: dynamic opinions: if this guy is a not-hostile civilian, then some mercs will complain about killing civilians + if ( pSoldier->bTeam == CIV_TEAM && (pSoldier->aiData.bNeutral || pSoldier->bSide == MercPtrs[ubAttacker]->bSide) ) + HandleDynamicOpinionChange( MercPtrs[ubAttacker], OPINIONEVENT_CIVKILLER, TRUE, TRUE ); + else + { + // if this enemy was attacking a freshly wounded merc, it is likely they posed a real threat - the merc will be thankful for saving their life + if ( pSoldier->ubTargetID != NOBODY && MercPtrs[pSoldier->ubTargetID]->bBleeding > 10 ) + { + AddOpinionEvent( MercPtrs[pSoldier->ubTargetID]->ubProfile, MercPtrs[ubAttacker]->ubProfile, OPINIONEVENT_BATTLE_SAVIOUR ); + } + else + { + // complain about a fragthief, or thank for assistance - correct event is chosen internally + HandleDynamicOpinionChange( MercPtrs[ubAttacker], OPINIONEVENT_FRAGTHIEF, TRUE, TRUE ); + } + } } else if ( MercPtrs[ ubAttacker ]->bTeam == MILITIA_TEAM ) { diff --git a/Utils/Text.h b/Utils/Text.h index 3358beff..92fe7558 100644 --- a/Utils/Text.h +++ b/Utils/Text.h @@ -2862,10 +2862,10 @@ extern STR16 szTacticalInventoryDialogString[]; extern STR16 szTacticalCoverDialogString[]; extern STR16 szTacticalCoverDialogPrintString[]; -// OPINIONEVENT_MAX is 34 +// OPINIONEVENT_MAX is 39 // DOST_MAX is 17 -extern STR16 szDynamicDialogueText[34][17]; +extern STR16 szDynamicDialogueText[39][17]; // Flugente: dynamic dialogue extern STR16 szDynamicDialogueText_DOST_VICTIM_TO_INTERJECTOR_DENY[]; diff --git a/Utils/_ChineseText.cpp b/Utils/_ChineseText.cpp index 02a540d1..ab7a02e3 100644 --- a/Utils/_ChineseText.cpp +++ b/Utils/_ChineseText.cpp @@ -9020,6 +9020,12 @@ STR16 szMercCompareEventText[]= L"%s enjoys combat a bit too much", L"%s is a good teacher", + L"%s led us to victory", + L"%s saved my life", + + L"%s stole my kill", + L"%s and me fought well together", + L"%s made the enemy surrender", }; STR16 szWHOWebSite[] = @@ -9177,7 +9183,7 @@ STR16 szTacticalCoverDialogPrintString[]= }; // TODO.Translate -STR16 szDynamicDialogueText[34][17] = // TODO.Translate +STR16 szDynamicDialogueText[39][17] = // TODO.Translate { // OPINIONEVENT_FRIENDLYFIRE L"What the hell! $CAUSE$ shot me!", @@ -9814,7 +9820,7 @@ STR16 szDynamicDialogueText[34][17] = // TODO.Translate L"You're welcome!", L"", L"", - L"$CAUSE$ is unimpressed by $VICTIM$'s progress. what do you think?", + L"$CAUSE$ is unimpressed by $VICTIM$'s progress. What do you think?", L"At some point you'll have to do on your own though.", L"Yeah, you better stick to $CAUSE$.", L"Nah, $VICTIM_GENDER$ is doing fine.", @@ -9824,6 +9830,101 @@ STR16 szDynamicDialogueText[34][17] = // TODO.Translate L"", L"", L"", + + // OPINIONEVENT_BESTCOMMANDEREVER + L"Yeah! Take that, losers! That was a mighty fine strategy, $CAUSE$!", + L"", + L"", + L"I couldn't have done it without you people.", + L"Well, I do have my moments.", + L"", + L"", + L"$CAUSE$ praises $VICTIM$'s leadership. What's your opinion?", + L"Well... it's not like $CAUSE_GENDER$ pulled that all by $CAUSE_PRONOUN$self...", + L"Agreed. $CAUSE$ is a fine squadleader.", + L"It's alright. You deserve this.", + L"You did everything right, $VICTIM$. Good work!", + L"Yeah. We're turning into quite the outfit, aren't we?", + L"We might have won this battle, but the war is far from over. We'll have to repeat victories like this.", + L"", + L"", + L"", + + // OPINIONEVENT_BATTLE_SAVIOUR + L"Wow, that was close. Thanks, $CAUSE$, I owe you!", + L"", + L"", + L"Don't mention it.", + L"You'd do the same for me.", + L"", + L"", + L"$CAUSE$ saved $VICTIM$'s life. What's your opinion?", + L"Pff, that guy was dead anyway.", + L"How bad is it, $VICTIM$? Can you still fight?", + L"Then I will. Good job!", + L"Yeah, I was worried there for a moment.", + L"Good job, but let's focus on ending this first, okay?", + L"When you're done hugging, could we go back to the issue at hand? You know, the guys shooting at us?", + L"", + L"", + L"", + + // OPINIONEVENT_FRAGTHIEF + L"Hey, I had him in my sights! That guy was MINE!", + L"", + L"", + L"What? Are you nuts? We're in the middle of a firefight, and you set up a killcount?", + L"What. Then where's my target?", + L"", + L"", + L"$VICTIM$ is angry with $CAUSE$ for stealing their kill. What's your take on this?", + L"This isn't some videogame, you moron. Nobody gives a shit about your godamn killcount.", + L"Yeah, I hate it when people don't stick to their firing lane.", + L"Stick to shooting whom you're supposed to, $CAUSE$.", + L"Jeez. This feels like nineties videogaming. What's next, $VICTIM_GENDER$'ll accuse the enemy of camping?", + L"You can sort this out later, but right now, everybody make sure we're not missing any angle.", + L"Just stick to your firing sector, kill 'em all, and there'll be plenty of kills for everybody.", + L"", + L"", + L"", + + // OPINIONEVENT_BATTLE_ASSIST + L"Boom! We sure took care of that guy.", + L"", + L"", + L"Well, it was mostly me, but you did help too.", + L"Yup. Ready for the next one.", + L"", + L"", + L"$CAUSE$ and $VICTIM$ brought down an enemy. Any comment?", + L"If you weren't such a bad shot, $CAUSE$ wouldn't have to finish your job.", + L"It takes several people to take them down? Jeez, what kind of body armour do they have?", + L"Blah blah, everybody look at me. $VICTIM$ is such a showoff.", + L"Hehe, they've got no chance.", + L"Hmm. We might need more firepower if it takes several of us to take those guys down, but good work anyway.", + L"I guess you get to share what he had. $CAUSE$, you may draw first.", + L"", + L"", + L"", + + // OPINIONEVENT_BATTLE_TOOK_PRISONER + L"Good thinking. We've already won, no need for more senseless slaughter.", + L"", + L"", + L"We'll see about that... I won't hesitate to use force against them if they resist.", + L"Yeah. Perhaps these guys have some intel we can use.", + L"", + L"", + L"The rest of the enemy team surrendered to $CAUSE$. Now what?", + L"No offense, but if you cannot handle death, $CAUSE$, perhaps this might not be the best job for you?", + L"Good job, $CAUSE$. Makes our job hell of a lot easier.", + L"Hey! Cut the crap. They already surrendered.", + L"Yeah, you can't trust these guys, they're totally reckless.", + L"We should move these guys to a prison ASAP. I'm sure they know what the army is up to.", + L"Pah. I'd have preferred from wasting these losers. They'll just slow us down.", + L"", + L"", + L"", }; diff --git a/Utils/_DutchText.cpp b/Utils/_DutchText.cpp index 0d5a3413..d999ae45 100644 --- a/Utils/_DutchText.cpp +++ b/Utils/_DutchText.cpp @@ -9031,6 +9031,12 @@ STR16 szMercCompareEventText[]= L"%s enjoys combat a bit too much", L"%s is a good teacher", + L"%s led us to victory", + L"%s saved my life", + + L"%s stole my kill", + L"%s and me fought well together", + L"%s made the enemy surrender", }; STR16 szWHOWebSite[] = @@ -9188,7 +9194,7 @@ STR16 szTacticalCoverDialogPrintString[]= }; // TODO.Translate -STR16 szDynamicDialogueText[34][17] = // TODO.Translate +STR16 szDynamicDialogueText[39][17] = // TODO.Translate { // OPINIONEVENT_FRIENDLYFIRE L"What the hell! $CAUSE$ shot me!", @@ -9825,7 +9831,7 @@ STR16 szDynamicDialogueText[34][17] = // TODO.Translate L"You're welcome!", L"", L"", - L"$CAUSE$ is unimpressed by $VICTIM$'s progress. what do you think?", + L"$CAUSE$ is unimpressed by $VICTIM$'s progress. What do you think?", L"At some point you'll have to do on your own though.", L"Yeah, you better stick to $CAUSE$.", L"Nah, $VICTIM_GENDER$ is doing fine.", @@ -9835,6 +9841,101 @@ STR16 szDynamicDialogueText[34][17] = // TODO.Translate L"", L"", L"", + + // OPINIONEVENT_BESTCOMMANDEREVER + L"Yeah! Take that, losers! That was a mighty fine strategy, $CAUSE$!", + L"", + L"", + L"I couldn't have done it without you people.", + L"Well, I do have my moments.", + L"", + L"", + L"$CAUSE$ praises $VICTIM$'s leadership. What's your opinion?", + L"Well... it's not like $CAUSE_GENDER$ pulled that all by $CAUSE_PRONOUN$self...", + L"Agreed. $CAUSE$ is a fine squadleader.", + L"It's alright. You deserve this.", + L"You did everything right, $VICTIM$. Good work!", + L"Yeah. We're turning into quite the outfit, aren't we?", + L"We might have won this battle, but the war is far from over. We'll have to repeat victories like this.", + L"", + L"", + L"", + + // OPINIONEVENT_BATTLE_SAVIOUR + L"Wow, that was close. Thanks, $CAUSE$, I owe you!", + L"", + L"", + L"Don't mention it.", + L"You'd do the same for me.", + L"", + L"", + L"$CAUSE$ saved $VICTIM$'s life. What's your opinion?", + L"Pff, that guy was dead anyway.", + L"How bad is it, $VICTIM$? Can you still fight?", + L"Then I will. Good job!", + L"Yeah, I was worried there for a moment.", + L"Good job, but let's focus on ending this first, okay?", + L"When you're done hugging, could we go back to the issue at hand? You know, the guys shooting at us?", + L"", + L"", + L"", + + // OPINIONEVENT_FRAGTHIEF + L"Hey, I had him in my sights! That guy was MINE!", + L"", + L"", + L"What? Are you nuts? We're in the middle of a firefight, and you set up a killcount?", + L"What. Then where's my target?", + L"", + L"", + L"$VICTIM$ is angry with $CAUSE$ for stealing their kill. What's your take on this?", + L"This isn't some videogame, you moron. Nobody gives a shit about your godamn killcount.", + L"Yeah, I hate it when people don't stick to their firing lane.", + L"Stick to shooting whom you're supposed to, $CAUSE$.", + L"Jeez. This feels like nineties videogaming. What's next, $VICTIM_GENDER$'ll accuse the enemy of camping?", + L"You can sort this out later, but right now, everybody make sure we're not missing any angle.", + L"Just stick to your firing sector, kill 'em all, and there'll be plenty of kills for everybody.", + L"", + L"", + L"", + + // OPINIONEVENT_BATTLE_ASSIST + L"Boom! We sure took care of that guy.", + L"", + L"", + L"Well, it was mostly me, but you did help too.", + L"Yup. Ready for the next one.", + L"", + L"", + L"$CAUSE$ and $VICTIM$ brought down an enemy. Any comment?", + L"If you weren't such a bad shot, $CAUSE$ wouldn't have to finish your job.", + L"It takes several people to take them down? Jeez, what kind of body armour do they have?", + L"Blah blah, everybody look at me. $VICTIM$ is such a showoff.", + L"Hehe, they've got no chance.", + L"Hmm. We might need more firepower if it takes several of us to take those guys down, but good work anyway.", + L"I guess you get to share what he had. $CAUSE$, you may draw first.", + L"", + L"", + L"", + + // OPINIONEVENT_BATTLE_TOOK_PRISONER + L"Good thinking. We've already won, no need for more senseless slaughter.", + L"", + L"", + L"We'll see about that... I won't hesitate to use force against them if they resist.", + L"Yeah. Perhaps these guys have some intel we can use.", + L"", + L"", + L"The rest of the enemy team surrendered to $CAUSE$. Now what?", + L"No offense, but if you cannot handle death, $CAUSE$, perhaps this might not be the best job for you?", + L"Good job, $CAUSE$. Makes our job hell of a lot easier.", + L"Hey! Cut the crap. They already surrendered.", + L"Yeah, you can't trust these guys, they're totally reckless.", + L"We should move these guys to a prison ASAP. I'm sure they know what the army is up to.", + L"Pah. I'd have preferred from wasting these losers. They'll just slow us down.", + L"", + L"", + L"", }; diff --git a/Utils/_EnglishText.cpp b/Utils/_EnglishText.cpp index 24d6f2a3..146e27df 100644 --- a/Utils/_EnglishText.cpp +++ b/Utils/_EnglishText.cpp @@ -9069,6 +9069,12 @@ STR16 szMercCompareEventText[]= L"%s enjoys combat a bit too much", L"%s is a good teacher", + L"%s led us to victory", + L"%s saved my life", + + L"%s stole my kill", + L"%s and me fought well together", + L"%s made the enemy surrender", }; STR16 szWHOWebSite[] = @@ -9226,7 +9232,7 @@ STR16 szTacticalCoverDialogPrintString[]= }; -STR16 szDynamicDialogueText[34][17] = +STR16 szDynamicDialogueText[39][17] = { // OPINIONEVENT_FRIENDLYFIRE L"What the hell! $CAUSE$ shot me!", @@ -9863,7 +9869,7 @@ STR16 szDynamicDialogueText[34][17] = L"You're welcome!", L"", L"", - L"$CAUSE$ is unimpressed by $VICTIM$'s progress. what do you think?", + L"$CAUSE$ is unimpressed by $VICTIM$'s progress. What do you think?", L"At some point you'll have to do on your own though.", L"Yeah, you better stick to $CAUSE$.", L"Nah, $VICTIM_GENDER$ is doing fine.", @@ -9873,6 +9879,101 @@ STR16 szDynamicDialogueText[34][17] = L"", L"", L"", + + // OPINIONEVENT_BESTCOMMANDEREVER + L"Yeah! Take that, losers! That was a mighty fine strategy, $CAUSE$!", + L"", + L"", + L"I couldn't have done it without you people.", + L"Well, I do have my moments.", + L"", + L"", + L"$CAUSE$ praises $VICTIM$'s leadership. What's your opinion?", + L"Well... it's not like $CAUSE_GENDER$ pulled that all by $CAUSE_PRONOUN$self...", + L"Agreed. $CAUSE$ is a fine squadleader.", + L"It's alright. You deserve this.", + L"You did everything right, $VICTIM$. Good work!", + L"Yeah. We're turning into quite the outfit, aren't we?", + L"We might have won this battle, but the war is far from over. We'll have to repeat victories like this.", + L"", + L"", + L"", + + // OPINIONEVENT_BATTLE_SAVIOUR + L"Wow, that was close. Thanks, $CAUSE$, I owe you!", + L"", + L"", + L"Don't mention it.", + L"You'd do the same for me.", + L"", + L"", + L"$CAUSE$ saved $VICTIM$'s life. What's your opinion?", + L"Pff, that guy was dead anyway.", + L"How bad is it, $VICTIM$? Can you still fight?", + L"Then I will. Good job!", + L"Yeah, I was worried there for a moment.", + L"Good job, but let's focus on ending this first, okay?", + L"When you're done hugging, could we go back to the issue at hand? You know, the guys shooting at us?", + L"", + L"", + L"", + + // OPINIONEVENT_FRAGTHIEF + L"Hey, I had him in my sights! That guy was MINE!", + L"", + L"", + L"What? Are you nuts? We're in the middle of a firefight, and you set up a killcount?", + L"What. Then where's my target?", + L"", + L"", + L"$VICTIM$ is angry with $CAUSE$ for stealing their kill. What's your take on this?", + L"This isn't some videogame, you moron. Nobody gives a shit about your godamn killcount.", + L"Yeah, I hate it when people don't stick to their firing lane.", + L"Stick to shooting whom you're supposed to, $CAUSE$.", + L"Jeez. This feels like nineties videogaming. What's next, $VICTIM_GENDER$'ll accuse the enemy of camping?", + L"You can sort this out later, but right now, everybody make sure we're not missing any angle.", + L"Just stick to your firing sector, kill 'em all, and there'll be plenty of kills for everybody.", + L"", + L"", + L"", + + // OPINIONEVENT_BATTLE_ASSIST + L"Boom! We sure took care of that guy.", + L"", + L"", + L"Well, it was mostly me, but you did help too.", + L"Yup. Ready for the next one.", + L"", + L"", + L"$CAUSE$ and $VICTIM$ brought down an enemy. Any comment?", + L"If you weren't such a bad shot, $CAUSE$ wouldn't have to finish your job.", + L"It takes several people to take them down? Jeez, what kind of body armour do they have?", + L"Blah blah, everybody look at me. $VICTIM$ is such a showoff.", + L"Hehe, they've got no chance.", + L"Hmm. We might need more firepower if it takes several of us to take those guys down, but good work anyway.", + L"I guess you get to share what he had. $CAUSE$, you may draw first.", + L"", + L"", + L"", + + // OPINIONEVENT_BATTLE_TOOK_PRISONER + L"Good thinking. We've already won, no need for more senseless slaughter.", + L"", + L"", + L"We'll see about that... I won't hesitate to use force against them if they resist.", + L"Yeah. Perhaps these guys have some intel we can use.", + L"", + L"", + L"The rest of the enemy team surrendered to $CAUSE$. Now what?", + L"No offense, but if you cannot handle death, $CAUSE$, perhaps this might not be the best job for you?", + L"Good job, $CAUSE$. Makes our job hell of a lot easier.", + L"Hey! Cut the crap. They already surrendered.", + L"Yeah, you can't trust these guys, they're totally reckless.", + L"We should move these guys to a prison ASAP. I'm sure they know what the army is up to.", + L"Pah. I'd have preferred from wasting these losers. They'll just slow us down.", + L"", + L"", + L"", }; diff --git a/Utils/_FrenchText.cpp b/Utils/_FrenchText.cpp index da898166..c776c461 100644 --- a/Utils/_FrenchText.cpp +++ b/Utils/_FrenchText.cpp @@ -9017,6 +9017,12 @@ STR16 szMercCompareEventText[]= L"%s enjoys combat a bit too much", L"%s is a good teacher", + L"%s led us to victory", + L"%s saved my life", + + L"%s stole my kill", + L"%s and me fought well together", + L"%s made the enemy surrender", }; STR16 szWHOWebSite[] = @@ -9174,7 +9180,7 @@ STR16 szTacticalCoverDialogPrintString[]= }; // TODO.Translate -STR16 szDynamicDialogueText[34][17] = // TODO.Translate +STR16 szDynamicDialogueText[39][17] = // TODO.Translate { // OPINIONEVENT_FRIENDLYFIRE L"What the hell! $CAUSE$ shot me!", @@ -9811,7 +9817,7 @@ STR16 szDynamicDialogueText[34][17] = // TODO.Translate L"You're welcome!", L"", L"", - L"$CAUSE$ is unimpressed by $VICTIM$'s progress. what do you think?", + L"$CAUSE$ is unimpressed by $VICTIM$'s progress. What do you think?", L"At some point you'll have to do on your own though.", L"Yeah, you better stick to $CAUSE$.", L"Nah, $VICTIM_GENDER$ is doing fine.", @@ -9821,6 +9827,101 @@ STR16 szDynamicDialogueText[34][17] = // TODO.Translate L"", L"", L"", + + // OPINIONEVENT_BESTCOMMANDEREVER + L"Yeah! Take that, losers! That was a mighty fine strategy, $CAUSE$!", + L"", + L"", + L"I couldn't have done it without you people.", + L"Well, I do have my moments.", + L"", + L"", + L"$CAUSE$ praises $VICTIM$'s leadership. What's your opinion?", + L"Well... it's not like $CAUSE_GENDER$ pulled that all by $CAUSE_PRONOUN$self...", + L"Agreed. $CAUSE$ is a fine squadleader.", + L"It's alright. You deserve this.", + L"You did everything right, $VICTIM$. Good work!", + L"Yeah. We're turning into quite the outfit, aren't we?", + L"We might have won this battle, but the war is far from over. We'll have to repeat victories like this.", + L"", + L"", + L"", + + // OPINIONEVENT_BATTLE_SAVIOUR + L"Wow, that was close. Thanks, $CAUSE$, I owe you!", + L"", + L"", + L"Don't mention it.", + L"You'd do the same for me.", + L"", + L"", + L"$CAUSE$ saved $VICTIM$'s life. What's your opinion?", + L"Pff, that guy was dead anyway.", + L"How bad is it, $VICTIM$? Can you still fight?", + L"Then I will. Good job!", + L"Yeah, I was worried there for a moment.", + L"Good job, but let's focus on ending this first, okay?", + L"When you're done hugging, could we go back to the issue at hand? You know, the guys shooting at us?", + L"", + L"", + L"", + + // OPINIONEVENT_FRAGTHIEF + L"Hey, I had him in my sights! That guy was MINE!", + L"", + L"", + L"What? Are you nuts? We're in the middle of a firefight, and you set up a killcount?", + L"What. Then where's my target?", + L"", + L"", + L"$VICTIM$ is angry with $CAUSE$ for stealing their kill. What's your take on this?", + L"This isn't some videogame, you moron. Nobody gives a shit about your godamn killcount.", + L"Yeah, I hate it when people don't stick to their firing lane.", + L"Stick to shooting whom you're supposed to, $CAUSE$.", + L"Jeez. This feels like nineties videogaming. What's next, $VICTIM_GENDER$'ll accuse the enemy of camping?", + L"You can sort this out later, but right now, everybody make sure we're not missing any angle.", + L"Just stick to your firing sector, kill 'em all, and there'll be plenty of kills for everybody.", + L"", + L"", + L"", + + // OPINIONEVENT_BATTLE_ASSIST + L"Boom! We sure took care of that guy.", + L"", + L"", + L"Well, it was mostly me, but you did help too.", + L"Yup. Ready for the next one.", + L"", + L"", + L"$CAUSE$ and $VICTIM$ brought down an enemy. Any comment?", + L"If you weren't such a bad shot, $CAUSE$ wouldn't have to finish your job.", + L"It takes several people to take them down? Jeez, what kind of body armour do they have?", + L"Blah blah, everybody look at me. $VICTIM$ is such a showoff.", + L"Hehe, they've got no chance.", + L"Hmm. We might need more firepower if it takes several of us to take those guys down, but good work anyway.", + L"I guess you get to share what he had. $CAUSE$, you may draw first.", + L"", + L"", + L"", + + // OPINIONEVENT_BATTLE_TOOK_PRISONER + L"Good thinking. We've already won, no need for more senseless slaughter.", + L"", + L"", + L"We'll see about that... I won't hesitate to use force against them if they resist.", + L"Yeah. Perhaps these guys have some intel we can use.", + L"", + L"", + L"The rest of the enemy team surrendered to $CAUSE$. Now what?", + L"No offense, but if you cannot handle death, $CAUSE$, perhaps this might not be the best job for you?", + L"Good job, $CAUSE$. Makes our job hell of a lot easier.", + L"Hey! Cut the crap. They already surrendered.", + L"Yeah, you can't trust these guys, they're totally reckless.", + L"We should move these guys to a prison ASAP. I'm sure they know what the army is up to.", + L"Pah. I'd have preferred from wasting these losers. They'll just slow us down.", + L"", + L"", + L"", }; diff --git a/Utils/_GermanText.cpp b/Utils/_GermanText.cpp index 4f1ea6d7..f999def5 100644 --- a/Utils/_GermanText.cpp +++ b/Utils/_GermanText.cpp @@ -8848,6 +8848,12 @@ STR16 szMercCompareEventText[]= L"%s enjoys combat a bit too much", L"%s is a good teacher", + L"%s led us to victory", + L"%s saved my life", + + L"%s stole my kill", + L"%s and me fought well together", + L"%s made the enemy surrender", }; STR16 szWHOWebSite[] = @@ -9005,7 +9011,7 @@ STR16 szTacticalCoverDialogPrintString[]= }; // TODO.Translate -STR16 szDynamicDialogueText[34][17] = // TODO.Translate +STR16 szDynamicDialogueText[39][17] = // TODO.Translate { // OPINIONEVENT_FRIENDLYFIRE L"What the hell! $CAUSE$ shot me!", @@ -9642,7 +9648,7 @@ STR16 szDynamicDialogueText[34][17] = // TODO.Translate L"You're welcome!", L"", L"", - L"$CAUSE$ is unimpressed by $VICTIM$'s progress. what do you think?", + L"$CAUSE$ is unimpressed by $VICTIM$'s progress. What do you think?", L"At some point you'll have to do on your own though.", L"Yeah, you better stick to $CAUSE$.", L"Nah, $VICTIM_GENDER$ is doing fine.", @@ -9652,6 +9658,101 @@ STR16 szDynamicDialogueText[34][17] = // TODO.Translate L"", L"", L"", + + // OPINIONEVENT_BESTCOMMANDEREVER + L"Yeah! Take that, losers! That was a mighty fine strategy, $CAUSE$!", + L"", + L"", + L"I couldn't have done it without you people.", + L"Well, I do have my moments.", + L"", + L"", + L"$CAUSE$ praises $VICTIM$'s leadership. What's your opinion?", + L"Well... it's not like $CAUSE_GENDER$ pulled that all by $CAUSE_PRONOUN$self...", + L"Agreed. $CAUSE$ is a fine squadleader.", + L"It's alright. You deserve this.", + L"You did everything right, $VICTIM$. Good work!", + L"Yeah. We're turning into quite the outfit, aren't we?", + L"We might have won this battle, but the war is far from over. We'll have to repeat victories like this.", + L"", + L"", + L"", + + // OPINIONEVENT_BATTLE_SAVIOUR + L"Wow, that was close. Thanks, $CAUSE$, I owe you!", + L"", + L"", + L"Don't mention it.", + L"You'd do the same for me.", + L"", + L"", + L"$CAUSE$ saved $VICTIM$'s life. What's your opinion?", + L"Pff, that guy was dead anyway.", + L"How bad is it, $VICTIM$? Can you still fight?", + L"Then I will. Good job!", + L"Yeah, I was worried there for a moment.", + L"Good job, but let's focus on ending this first, okay?", + L"When you're done hugging, could we go back to the issue at hand? You know, the guys shooting at us?", + L"", + L"", + L"", + + // OPINIONEVENT_FRAGTHIEF + L"Hey, I had him in my sights! That guy was MINE!", + L"", + L"", + L"What? Are you nuts? We're in the middle of a firefight, and you set up a killcount?", + L"What. Then where's my target?", + L"", + L"", + L"$VICTIM$ is angry with $CAUSE$ for stealing their kill. What's your take on this?", + L"This isn't some videogame, you moron. Nobody gives a shit about your godamn killcount.", + L"Yeah, I hate it when people don't stick to their firing lane.", + L"Stick to shooting whom you're supposed to, $CAUSE$.", + L"Jeez. This feels like nineties videogaming. What's next, $VICTIM_GENDER$'ll accuse the enemy of camping?", + L"You can sort this out later, but right now, everybody make sure we're not missing any angle.", + L"Just stick to your firing sector, kill 'em all, and there'll be plenty of kills for everybody.", + L"", + L"", + L"", + + // OPINIONEVENT_BATTLE_ASSIST + L"Boom! We sure took care of that guy.", + L"", + L"", + L"Well, it was mostly me, but you did help too.", + L"Yup. Ready for the next one.", + L"", + L"", + L"$CAUSE$ and $VICTIM$ brought down an enemy. Any comment?", + L"If you weren't such a bad shot, $CAUSE$ wouldn't have to finish your job.", + L"It takes several people to take them down? Jeez, what kind of body armour do they have?", + L"Blah blah, everybody look at me. $VICTIM$ is such a showoff.", + L"Hehe, they've got no chance.", + L"Hmm. We might need more firepower if it takes several of us to take those guys down, but good work anyway.", + L"I guess you get to share what he had. $CAUSE$, you may draw first.", + L"", + L"", + L"", + + // OPINIONEVENT_BATTLE_TOOK_PRISONER + L"Good thinking. We've already won, no need for more senseless slaughter.", + L"", + L"", + L"We'll see about that... I won't hesitate to use force against them if they resist.", + L"Yeah. Perhaps these guys have some intel we can use.", + L"", + L"", + L"The rest of the enemy team surrendered to $CAUSE$. Now what?", + L"No offense, but if you cannot handle death, $CAUSE$, perhaps this might not be the best job for you?", + L"Good job, $CAUSE$. Makes our job hell of a lot easier.", + L"Hey! Cut the crap. They already surrendered.", + L"Yeah, you can't trust these guys, they're totally reckless.", + L"We should move these guys to a prison ASAP. I'm sure they know what the army is up to.", + L"Pah. I'd have preferred from wasting these losers. They'll just slow us down.", + L"", + L"", + L"", }; diff --git a/Utils/_ItalianText.cpp b/Utils/_ItalianText.cpp index c5ddd10b..b7d09e6f 100644 --- a/Utils/_ItalianText.cpp +++ b/Utils/_ItalianText.cpp @@ -9026,6 +9026,12 @@ STR16 szMercCompareEventText[]= L"%s enjoys combat a bit too much", L"%s is a good teacher", + L"%s led us to victory", + L"%s saved my life", + + L"%s stole my kill", + L"%s and me fought well together", + L"%s made the enemy surrender", }; STR16 szWHOWebSite[] = @@ -9183,7 +9189,7 @@ STR16 szTacticalCoverDialogPrintString[]= }; // TODO.Translate -STR16 szDynamicDialogueText[34][17] = // TODO.Translate +STR16 szDynamicDialogueText[39][17] = // TODO.Translate { // OPINIONEVENT_FRIENDLYFIRE L"What the hell! $CAUSE$ shot me!", @@ -9820,7 +9826,7 @@ STR16 szDynamicDialogueText[34][17] = // TODO.Translate L"You're welcome!", L"", L"", - L"$CAUSE$ is unimpressed by $VICTIM$'s progress. what do you think?", + L"$CAUSE$ is unimpressed by $VICTIM$'s progress. What do you think?", L"At some point you'll have to do on your own though.", L"Yeah, you better stick to $CAUSE$.", L"Nah, $VICTIM_GENDER$ is doing fine.", @@ -9830,6 +9836,101 @@ STR16 szDynamicDialogueText[34][17] = // TODO.Translate L"", L"", L"", + + // OPINIONEVENT_BESTCOMMANDEREVER + L"Yeah! Take that, losers! That was a mighty fine strategy, $CAUSE$!", + L"", + L"", + L"I couldn't have done it without you people.", + L"Well, I do have my moments.", + L"", + L"", + L"$CAUSE$ praises $VICTIM$'s leadership. What's your opinion?", + L"Well... it's not like $CAUSE_GENDER$ pulled that all by $CAUSE_PRONOUN$self...", + L"Agreed. $CAUSE$ is a fine squadleader.", + L"It's alright. You deserve this.", + L"You did everything right, $VICTIM$. Good work!", + L"Yeah. We're turning into quite the outfit, aren't we?", + L"We might have won this battle, but the war is far from over. We'll have to repeat victories like this.", + L"", + L"", + L"", + + // OPINIONEVENT_BATTLE_SAVIOUR + L"Wow, that was close. Thanks, $CAUSE$, I owe you!", + L"", + L"", + L"Don't mention it.", + L"You'd do the same for me.", + L"", + L"", + L"$CAUSE$ saved $VICTIM$'s life. What's your opinion?", + L"Pff, that guy was dead anyway.", + L"How bad is it, $VICTIM$? Can you still fight?", + L"Then I will. Good job!", + L"Yeah, I was worried there for a moment.", + L"Good job, but let's focus on ending this first, okay?", + L"When you're done hugging, could we go back to the issue at hand? You know, the guys shooting at us?", + L"", + L"", + L"", + + // OPINIONEVENT_FRAGTHIEF + L"Hey, I had him in my sights! That guy was MINE!", + L"", + L"", + L"What? Are you nuts? We're in the middle of a firefight, and you set up a killcount?", + L"What. Then where's my target?", + L"", + L"", + L"$VICTIM$ is angry with $CAUSE$ for stealing their kill. What's your take on this?", + L"This isn't some videogame, you moron. Nobody gives a shit about your godamn killcount.", + L"Yeah, I hate it when people don't stick to their firing lane.", + L"Stick to shooting whom you're supposed to, $CAUSE$.", + L"Jeez. This feels like nineties videogaming. What's next, $VICTIM_GENDER$'ll accuse the enemy of camping?", + L"You can sort this out later, but right now, everybody make sure we're not missing any angle.", + L"Just stick to your firing sector, kill 'em all, and there'll be plenty of kills for everybody.", + L"", + L"", + L"", + + // OPINIONEVENT_BATTLE_ASSIST + L"Boom! We sure took care of that guy.", + L"", + L"", + L"Well, it was mostly me, but you did help too.", + L"Yup. Ready for the next one.", + L"", + L"", + L"$CAUSE$ and $VICTIM$ brought down an enemy. Any comment?", + L"If you weren't such a bad shot, $CAUSE$ wouldn't have to finish your job.", + L"It takes several people to take them down? Jeez, what kind of body armour do they have?", + L"Blah blah, everybody look at me. $VICTIM$ is such a showoff.", + L"Hehe, they've got no chance.", + L"Hmm. We might need more firepower if it takes several of us to take those guys down, but good work anyway.", + L"I guess you get to share what he had. $CAUSE$, you may draw first.", + L"", + L"", + L"", + + // OPINIONEVENT_BATTLE_TOOK_PRISONER + L"Good thinking. We've already won, no need for more senseless slaughter.", + L"", + L"", + L"We'll see about that... I won't hesitate to use force against them if they resist.", + L"Yeah. Perhaps these guys have some intel we can use.", + L"", + L"", + L"The rest of the enemy team surrendered to $CAUSE$. Now what?", + L"No offense, but if you cannot handle death, $CAUSE$, perhaps this might not be the best job for you?", + L"Good job, $CAUSE$. Makes our job hell of a lot easier.", + L"Hey! Cut the crap. They already surrendered.", + L"Yeah, you can't trust these guys, they're totally reckless.", + L"We should move these guys to a prison ASAP. I'm sure they know what the army is up to.", + L"Pah. I'd have preferred from wasting these losers. They'll just slow us down.", + L"", + L"", + L"", }; diff --git a/Utils/_PolishText.cpp b/Utils/_PolishText.cpp index d0e2a3aa..cfc8c2d9 100644 --- a/Utils/_PolishText.cpp +++ b/Utils/_PolishText.cpp @@ -9043,6 +9043,12 @@ STR16 szMercCompareEventText[]= L"%s enjoys combat a bit too much", L"%s is a good teacher", + L"%s led us to victory", + L"%s saved my life", + + L"%s stole my kill", + L"%s and me fought well together", + L"%s made the enemy surrender", }; STR16 szWHOWebSite[] = @@ -9200,7 +9206,7 @@ STR16 szTacticalCoverDialogPrintString[]= }; // TODO.Translate -STR16 szDynamicDialogueText[34][17] = // TODO.Translate +STR16 szDynamicDialogueText[39][17] = // TODO.Translate { // OPINIONEVENT_FRIENDLYFIRE L"What the hell! $CAUSE$ shot me!", @@ -9837,7 +9843,7 @@ STR16 szDynamicDialogueText[34][17] = // TODO.Translate L"You're welcome!", L"", L"", - L"$CAUSE$ is unimpressed by $VICTIM$'s progress. what do you think?", + L"$CAUSE$ is unimpressed by $VICTIM$'s progress. What do you think?", L"At some point you'll have to do on your own though.", L"Yeah, you better stick to $CAUSE$.", L"Nah, $VICTIM_GENDER$ is doing fine.", @@ -9847,6 +9853,101 @@ STR16 szDynamicDialogueText[34][17] = // TODO.Translate L"", L"", L"", + + // OPINIONEVENT_BESTCOMMANDEREVER + L"Yeah! Take that, losers! That was a mighty fine strategy, $CAUSE$!", + L"", + L"", + L"I couldn't have done it without you people.", + L"Well, I do have my moments.", + L"", + L"", + L"$CAUSE$ praises $VICTIM$'s leadership. What's your opinion?", + L"Well... it's not like $CAUSE_GENDER$ pulled that all by $CAUSE_PRONOUN$self...", + L"Agreed. $CAUSE$ is a fine squadleader.", + L"It's alright. You deserve this.", + L"You did everything right, $VICTIM$. Good work!", + L"Yeah. We're turning into quite the outfit, aren't we?", + L"We might have won this battle, but the war is far from over. We'll have to repeat victories like this.", + L"", + L"", + L"", + + // OPINIONEVENT_BATTLE_SAVIOUR + L"Wow, that was close. Thanks, $CAUSE$, I owe you!", + L"", + L"", + L"Don't mention it.", + L"You'd do the same for me.", + L"", + L"", + L"$CAUSE$ saved $VICTIM$'s life. What's your opinion?", + L"Pff, that guy was dead anyway.", + L"How bad is it, $VICTIM$? Can you still fight?", + L"Then I will. Good job!", + L"Yeah, I was worried there for a moment.", + L"Good job, but let's focus on ending this first, okay?", + L"When you're done hugging, could we go back to the issue at hand? You know, the guys shooting at us?", + L"", + L"", + L"", + + // OPINIONEVENT_FRAGTHIEF + L"Hey, I had him in my sights! That guy was MINE!", + L"", + L"", + L"What? Are you nuts? We're in the middle of a firefight, and you set up a killcount?", + L"What. Then where's my target?", + L"", + L"", + L"$VICTIM$ is angry with $CAUSE$ for stealing their kill. What's your take on this?", + L"This isn't some videogame, you moron. Nobody gives a shit about your godamn killcount.", + L"Yeah, I hate it when people don't stick to their firing lane.", + L"Stick to shooting whom you're supposed to, $CAUSE$.", + L"Jeez. This feels like nineties videogaming. What's next, $VICTIM_GENDER$'ll accuse the enemy of camping?", + L"You can sort this out later, but right now, everybody make sure we're not missing any angle.", + L"Just stick to your firing sector, kill 'em all, and there'll be plenty of kills for everybody.", + L"", + L"", + L"", + + // OPINIONEVENT_BATTLE_ASSIST + L"Boom! We sure took care of that guy.", + L"", + L"", + L"Well, it was mostly me, but you did help too.", + L"Yup. Ready for the next one.", + L"", + L"", + L"$CAUSE$ and $VICTIM$ brought down an enemy. Any comment?", + L"If you weren't such a bad shot, $CAUSE$ wouldn't have to finish your job.", + L"It takes several people to take them down? Jeez, what kind of body armour do they have?", + L"Blah blah, everybody look at me. $VICTIM$ is such a showoff.", + L"Hehe, they've got no chance.", + L"Hmm. We might need more firepower if it takes several of us to take those guys down, but good work anyway.", + L"I guess you get to share what he had. $CAUSE$, you may draw first.", + L"", + L"", + L"", + + // OPINIONEVENT_BATTLE_TOOK_PRISONER + L"Good thinking. We've already won, no need for more senseless slaughter.", + L"", + L"", + L"We'll see about that... I won't hesitate to use force against them if they resist.", + L"Yeah. Perhaps these guys have some intel we can use.", + L"", + L"", + L"The rest of the enemy team surrendered to $CAUSE$. Now what?", + L"No offense, but if you cannot handle death, $CAUSE$, perhaps this might not be the best job for you?", + L"Good job, $CAUSE$. Makes our job hell of a lot easier.", + L"Hey! Cut the crap. They already surrendered.", + L"Yeah, you can't trust these guys, they're totally reckless.", + L"We should move these guys to a prison ASAP. I'm sure they know what the army is up to.", + L"Pah. I'd have preferred from wasting these losers. They'll just slow us down.", + L"", + L"", + L"", }; diff --git a/Utils/_RussianText.cpp b/Utils/_RussianText.cpp index dced341b..cf9ac84d 100644 --- a/Utils/_RussianText.cpp +++ b/Utils/_RussianText.cpp @@ -9014,6 +9014,12 @@ STR16 szMercCompareEventText[]= // TODO.Translate L"%s enjoys combat a bit too much", L"%s is a good teacher", + L"%s led us to victory", + L"%s saved my life", + + L"%s stole my kill", + L"%s and me fought well together", + L"%s made the enemy surrender", }; STR16 szWHOWebSite[] = // TODO.Translate @@ -9171,7 +9177,7 @@ STR16 szTacticalCoverDialogPrintString[]= }; // TODO.Translate -STR16 szDynamicDialogueText[34][17] = // TODO.Translate +STR16 szDynamicDialogueText[39][17] = // TODO.Translate { // OPINIONEVENT_FRIENDLYFIRE L"What the hell! $CAUSE$ shot me!", @@ -9808,7 +9814,7 @@ STR16 szDynamicDialogueText[34][17] = // TODO.Translate L"You're welcome!", L"", L"", - L"$CAUSE$ is unimpressed by $VICTIM$'s progress. what do you think?", + L"$CAUSE$ is unimpressed by $VICTIM$'s progress. What do you think?", L"At some point you'll have to do on your own though.", L"Yeah, you better stick to $CAUSE$.", L"Nah, $VICTIM_GENDER$ is doing fine.", @@ -9818,6 +9824,101 @@ STR16 szDynamicDialogueText[34][17] = // TODO.Translate L"", L"", L"", + + // OPINIONEVENT_BESTCOMMANDEREVER + L"Yeah! Take that, losers! That was a mighty fine strategy, $CAUSE$!", + L"", + L"", + L"I couldn't have done it without you people.", + L"Well, I do have my moments.", + L"", + L"", + L"$CAUSE$ praises $VICTIM$'s leadership. What's your opinion?", + L"Well... it's not like $CAUSE_GENDER$ pulled that all by $CAUSE_PRONOUN$self...", + L"Agreed. $CAUSE$ is a fine squadleader.", + L"It's alright. You deserve this.", + L"You did everything right, $VICTIM$. Good work!", + L"Yeah. We're turning into quite the outfit, aren't we?", + L"We might have won this battle, but the war is far from over. We'll have to repeat victories like this.", + L"", + L"", + L"", + + // OPINIONEVENT_BATTLE_SAVIOUR + L"Wow, that was close. Thanks, $CAUSE$, I owe you!", + L"", + L"", + L"Don't mention it.", + L"You'd do the same for me.", + L"", + L"", + L"$CAUSE$ saved $VICTIM$'s life. What's your opinion?", + L"Pff, that guy was dead anyway.", + L"How bad is it, $VICTIM$? Can you still fight?", + L"Then I will. Good job!", + L"Yeah, I was worried there for a moment.", + L"Good job, but let's focus on ending this first, okay?", + L"When you're done hugging, could we go back to the issue at hand? You know, the guys shooting at us?", + L"", + L"", + L"", + + // OPINIONEVENT_FRAGTHIEF + L"Hey, I had him in my sights! That guy was MINE!", + L"", + L"", + L"What? Are you nuts? We're in the middle of a firefight, and you set up a killcount?", + L"What. Then where's my target?", + L"", + L"", + L"$VICTIM$ is angry with $CAUSE$ for stealing their kill. What's your take on this?", + L"This isn't some videogame, you moron. Nobody gives a shit about your godamn killcount.", + L"Yeah, I hate it when people don't stick to their firing lane.", + L"Stick to shooting whom you're supposed to, $CAUSE$.", + L"Jeez. This feels like nineties videogaming. What's next, $VICTIM_GENDER$'ll accuse the enemy of camping?", + L"You can sort this out later, but right now, everybody make sure we're not missing any angle.", + L"Just stick to your firing sector, kill 'em all, and there'll be plenty of kills for everybody.", + L"", + L"", + L"", + + // OPINIONEVENT_BATTLE_ASSIST + L"Boom! We sure took care of that guy.", + L"", + L"", + L"Well, it was mostly me, but you did help too.", + L"Yup. Ready for the next one.", + L"", + L"", + L"$CAUSE$ and $VICTIM$ brought down an enemy. Any comment?", + L"If you weren't such a bad shot, $CAUSE$ wouldn't have to finish your job.", + L"It takes several people to take them down? Jeez, what kind of body armour do they have?", + L"Blah blah, everybody look at me. $VICTIM$ is such a showoff.", + L"Hehe, they've got no chance.", + L"Hmm. We might need more firepower if it takes several of us to take those guys down, but good work anyway.", + L"I guess you get to share what he had. $CAUSE$, you may draw first.", + L"", + L"", + L"", + + // OPINIONEVENT_BATTLE_TOOK_PRISONER + L"Good thinking. We've already won, no need for more senseless slaughter.", + L"", + L"", + L"We'll see about that... I won't hesitate to use force against them if they resist.", + L"Yeah. Perhaps these guys have some intel we can use.", + L"", + L"", + L"The rest of the enemy team surrendered to $CAUSE$. Now what?", + L"No offense, but if you cannot handle death, $CAUSE$, perhaps this might not be the best job for you?", + L"Good job, $CAUSE$. Makes our job hell of a lot easier.", + L"Hey! Cut the crap. They already surrendered.", + L"Yeah, you can't trust these guys, they're totally reckless.", + L"We should move these guys to a prison ASAP. I'm sure they know what the army is up to.", + L"Pah. I'd have preferred from wasting these losers. They'll just slow us down.", + L"", + L"", + L"", };