diff --git a/GameSettings.cpp b/GameSettings.cpp index a149f07a0..9eb832767 100644 --- a/GameSettings.cpp +++ b/GameSettings.cpp @@ -2271,6 +2271,7 @@ void LoadSkillTraitsExternalSettings() gSkillTraitValues.sCODisguiseAPReduction = iniReader.ReadInteger("Covert Ops","COVERT_DISGUISE_PERCENT_AP_REDUCTION", 20, 0, 50); gSkillTraitValues.sCOCloseDetectionRange = iniReader.ReadInteger("Covert Ops","COVERT_CLOSE_DETECTION_RANGE", 10, 0, 100); gSkillTraitValues.sCOCloseDetectionRangeSoldierCorpse = iniReader.ReadInteger("Covert Ops","COVERT_CLOSE_DETECTION_RANGE_SOLDIER_CORPSE", 5, 0, 100); + gSkillTraitValues.fCOElitesDetectNextTile = iniReader.ReadBoolean("Covert Ops","COVERT_ELITES_DETECT_NEXTTILE", TRUE); } //DBrot: Grids void LoadModSettings(){ diff --git a/GameSettings.h b/GameSettings.h index b20151661..73c0bf95f 100644 --- a/GameSettings.h +++ b/GameSettings.h @@ -1520,6 +1520,7 @@ typedef struct INT16 sCODisguiseAPReduction; INT16 sCOCloseDetectionRange; INT16 sCOCloseDetectionRangeSoldierCorpse; + BOOLEAN fCOElitesDetectNextTile; } SKILL_TRAIT_VALUES; diff --git a/Tactical/Soldier Control.cpp b/Tactical/Soldier Control.cpp index 6d9e6aa14..09d496ed4 100644 --- a/Tactical/Soldier Control.cpp +++ b/Tactical/Soldier Control.cpp @@ -15156,6 +15156,16 @@ BOOLEAN SOLDIERTYPE::SeemsLegit( UINT8 ubObserverID ) } break; } + + // if we are a soldier, elites can uncover us if we are VERY close, and more experienced + if ( this->bSoldierFlagMask & SOLDIER_COVERT_SOLDIER && gSkillTraitValues.fCOElitesDetectNextTile && distance < 2 && EffectiveExpLevel(pSoldier) > EffectiveExpLevel(this) + covertlevel ) + { + if ( pSoldier->ubSoldierClass == SOLDIER_CLASS_ELITE ) + { + ScreenMsg( FONT_MCOLOR_LTYELLOW, MSG_INTERFACE, szCovertTextStr[STR_COVERT_TOO_CLOSE_TO_ELITE], this->GetName() ); + return FALSE; + } + } } if ( this->bSoldierFlagMask & SOLDIER_COVERT_CIV ) diff --git a/Utils/Text.h b/Utils/Text.h index ced012be1..7118ead15 100644 --- a/Utils/Text.h +++ b/Utils/Text.h @@ -692,6 +692,7 @@ enum STR_COVERT_TEST_FAIL, STR_COVERT_STEAL_FAIL, STR_COVERT_APPLYITEM_STEAL_FAIL, + STR_COVERT_TOO_CLOSE_TO_ELITE, TEXT_NUM_COVERT_STR }; diff --git a/Utils/_ChineseText.cpp b/Utils/_ChineseText.cpp index 142a12c34..e1aae69a4 100644 --- a/Utils/_ChineseText.cpp +++ b/Utils/_ChineseText.cpp @@ -7522,6 +7522,7 @@ STR16 szCovertTextStr[]= L"%s的伪装要被识破了。", // L"%s's disguise will not hold.", L"%s在偷窃的时候被抓了!", // L"%s was caught stealing!", L"%s在试图调整%s的物品栏。", // L"%s tried to manipulate %s's inventory." + L"%s is too close to an elite soldier!", // TODO.Translate }; STR16 szCorpseTextStr[]= diff --git a/Utils/_DutchText.cpp b/Utils/_DutchText.cpp index e134a042b..97676921f 100644 --- a/Utils/_DutchText.cpp +++ b/Utils/_DutchText.cpp @@ -7519,7 +7519,8 @@ STR16 szCovertTextStr[]= L"%s's disguise seems to be ok...", L"%s's disguise will not hold.", L"%s was caught stealing!", - L"%s tried to manipulate %s's inventory." + L"%s tried to manipulate %s's inventory.", + L"%s is too close to an elite soldier!", // TODO.Translate }; STR16 szCorpseTextStr[]= diff --git a/Utils/_EnglishText.cpp b/Utils/_EnglishText.cpp index 73e0df3f8..90065e6ba 100644 --- a/Utils/_EnglishText.cpp +++ b/Utils/_EnglishText.cpp @@ -7507,7 +7507,8 @@ STR16 szCovertTextStr[]= L"%s's disguise seems to be ok...", L"%s's disguise will not hold.", L"%s was caught stealing!", - L"%s tried to manipulate %s's inventory." + L"%s tried to manipulate %s's inventory.", + L"%s is too close to an elite soldier!", }; STR16 szCorpseTextStr[]= diff --git a/Utils/_FrenchText.cpp b/Utils/_FrenchText.cpp index 5a88167d0..e337d670d 100644 --- a/Utils/_FrenchText.cpp +++ b/Utils/_FrenchText.cpp @@ -7503,7 +7503,8 @@ STR16 szCovertTextStr[]= L"%s's disguise seems to be ok...", L"%s's disguise will not hold.", L"%s was caught stealing!", - L"%s tried to manipulate %s's inventory." + L"%s tried to manipulate %s's inventory.", + L"%s is too close to an elite soldier!", // TODO.Translate }; STR16 szCorpseTextStr[]= diff --git a/Utils/_GermanText.cpp b/Utils/_GermanText.cpp index e9f387749..e1a4fa3e0 100644 --- a/Utils/_GermanText.cpp +++ b/Utils/_GermanText.cpp @@ -7330,7 +7330,8 @@ STR16 szCovertTextStr[]= L"%s's Verkleidung sollte überzeugen", L"%s's Verkleidung wird auffliegen!", L"%s wurde beim Stehlen erwischt!", - L"%s tried to manipulate %s's inventory." + L"%s hat versucht, %s's Azsrüstung zu verändern.", + L"%s ist zu nah an einem Elitesoldat!", }; STR16 szCorpseTextStr[]= diff --git a/Utils/_ItalianText.cpp b/Utils/_ItalianText.cpp index 959ea633f..aaa06fb6d 100644 --- a/Utils/_ItalianText.cpp +++ b/Utils/_ItalianText.cpp @@ -7505,7 +7505,8 @@ STR16 szCovertTextStr[]= L"%s's disguise seems to be ok...", L"%s's disguise will not hold.", L"%s was caught stealing!", - L"%s tried to manipulate %s's inventory." + L"%s tried to manipulate %s's inventory.", + L"%s is too close to an elite soldier!", // TODO.Translate }; STR16 szCorpseTextStr[]= diff --git a/Utils/_PolishText.cpp b/Utils/_PolishText.cpp index e4ea65330..b9fee09bc 100644 --- a/Utils/_PolishText.cpp +++ b/Utils/_PolishText.cpp @@ -7525,7 +7525,8 @@ STR16 szCovertTextStr[]= L"%s's disguise seems to be ok...", L"%s's disguise will not hold.", L"%s was caught stealing!", - L"%s tried to manipulate %s's inventory." + L"%s tried to manipulate %s's inventory.", + L"%s is too close to an elite soldier!", // TODO.Translate }; STR16 szCorpseTextStr[]= diff --git a/Utils/_RussianText.cpp b/Utils/_RussianText.cpp index 917db79ea..d4379b2b6 100644 --- a/Utils/_RussianText.cpp +++ b/Utils/_RussianText.cpp @@ -7506,7 +7506,8 @@ STR16 szCovertTextStr[]= L"%s's disguise seems to be ok...", L"%s's disguise will not hold.", L"%s was caught stealing!", - L"%s tried to manipulate %s's inventory." + L"%s tried to manipulate %s's inventory.", + L"%s is too close to an elite soldier!", // TODO.Translate }; STR16 szCorpseTextStr[]= diff --git a/Utils/_TaiwaneseText.cpp b/Utils/_TaiwaneseText.cpp index e1d8d0f53..67c429075 100644 --- a/Utils/_TaiwaneseText.cpp +++ b/Utils/_TaiwaneseText.cpp @@ -7523,7 +7523,8 @@ STR16 szCovertTextStr[]= L"%s's disguise seems to be ok...", L"%s's disguise will not hold.", L"%s was caught stealing!", - L"%s tried to manipulate %s's inventory." + L"%s tried to manipulate %s's inventory.", + L"%s is too close to an elite soldier!", // TODO.Translate }; STR16 szCorpseTextStr[]=