From 3d1f8b19510b08252eb6abf1be37c5e1933dd32a Mon Sep 17 00:00:00 2001 From: Sevenfm Date: Sun, 1 May 2022 08:24:46 +0000 Subject: [PATCH] New ingame option "Show enemy movement" - show location of recently known enemy (seen/heard last turn). Improved tooltip for formation movement: SHIFT + click to move in formation. git-svn-id: https://ja2svn.mooo.com/source/ja2/trunk/GameSource/ja2_v1.13/Build@9372 3b4a5df2-a311-0410-b5c6-a8a6f20db521 --- GameSettings.cpp | 3 ++ GameSettings.h | 3 ++ TileEngine/Explosion Control.cpp | 63 ++++++++++++++++++++++++++++++++ Utils/_ChineseText.cpp | 4 +- Utils/_DutchText.cpp | 4 +- Utils/_EnglishText.cpp | 4 +- Utils/_FrenchText.cpp | 8 ++-- Utils/_GermanText.cpp | 4 +- Utils/_ItalianText.cpp | 4 +- Utils/_PolishText.cpp | 4 +- Utils/_RussianText.cpp | 4 +- 11 files changed, 95 insertions(+), 10 deletions(-) diff --git a/GameSettings.cpp b/GameSettings.cpp index f3906664..5bf85996 100644 --- a/GameSettings.cpp +++ b/GameSettings.cpp @@ -341,6 +341,7 @@ BOOLEAN LoadGameSettings() gGameSettings.fOptions[TOPTION_TOGGLE_TURN_MODE] = FALSE; gGameSettings.fOptions[TOPTION_MERCENARY_FORMATIONS] = iniReader.ReadBoolean("JA2 Game Settings","TOPTION_MERCENARY_FORMATIONS" , TRUE ); // Flugente: mercenary formations + gGameSettings.fOptions[TOPTION_SHOW_ENEMY_LOCATION] = iniReader.ReadBoolean("JA2 Game Settings","TOPTION_SHOW_ENEMY_LOCATION" , FALSE); // sevenfm: show locations of known enemies gGameSettings.fOptions[TOPTION_REPORT_MISS_MARGIN] = iniReader.ReadBoolean("JA2 Game Settings","TOPTION_REPORT_MISS_MARGIN" , FALSE ); // HEADROCK HAM 4: Shot offset report gGameSettings.fOptions[TOPTION_USE_LOGICAL_BODYTYPES] = iniReader.ReadBoolean("JA2 Game Settings","TOPTION_USE_LOGICAL_BODYTYPES" , FALSE ); gGameSettings.fOptions[TOPTION_ALT_MAP_COLOR] = iniReader.ReadBoolean("JA2 Game Settings","TOPTION_ALT_MAP_COLOR" , FALSE ); // HEADROCK HAM 4: Strategic Map Colors @@ -620,6 +621,7 @@ BOOLEAN SaveGameSettings() settings << "TOPTION_ZOMBIES = " << (gGameSettings.fOptions[TOPTION_ZOMBIES] ? "TRUE" : "FALSE" ) << endl; settings << "TOPTION_ENABLE_INVENTORY_POPUPS = " << (gGameSettings.fOptions[TOPTION_ENABLE_INVENTORY_POPUPS] ? "TRUE" : "FALSE" ) << endl; // the_bob : enable popups for picking items from sector inv settings << "TOPTION_MERCENARY_FORMATIONS = " << (gGameSettings.fOptions[TOPTION_MERCENARY_FORMATIONS] ? "TRUE" : "FALSE" ) << endl; + settings << "TOPTION_SHOW_ENEMY_LOCATION = " << (gGameSettings.fOptions[TOPTION_SHOW_ENEMY_LOCATION] ? "TRUE" : "FALSE" ) << endl; settings << "TOPTION_CHEAT_MODE_OPTIONS_HEADER = " << (gGameSettings.fOptions[TOPTION_CHEAT_MODE_OPTIONS_HEADER] ? "TRUE" : "FALSE" ) << endl; settings << "TOPTION_FORCE_BOBBY_RAY_SHIPMENTS = " << (gGameSettings.fOptions[TOPTION_FORCE_BOBBY_RAY_SHIPMENTS] ? "TRUE" : "FALSE" ) << endl; @@ -847,6 +849,7 @@ void InitGameSettings() gGameSettings.fOptions[TOPTION_INVERT_WHEEL] = FALSE; gGameSettings.fOptions[ TOPTION_MERCENARY_FORMATIONS ] = FALSE; // Flugente: mercenary formations + gGameSettings.fOptions[ TOPTION_SHOW_ENEMY_LOCATION ] = FALSE; // sevenfm: show locations of known enemies // arynn: Cheat/Debug Menu gGameSettings.fOptions[ TOPTION_CHEAT_MODE_OPTIONS_HEADER ] = FALSE; diff --git a/GameSettings.h b/GameSettings.h index f1c5cc20..856c62f2 100644 --- a/GameSettings.h +++ b/GameSettings.h @@ -101,6 +101,9 @@ enum // Flugente: mercenary formations TOPTION_MERCENARY_FORMATIONS, + // sevenfm: new settings + TOPTION_SHOW_ENEMY_LOCATION, + // arynn: Debug/Cheat TOPTION_CHEAT_MODE_OPTIONS_HEADER, TOPTION_FORCE_BOBBY_RAY_SHIPMENTS, // force all pending Bobby Ray shipments diff --git a/TileEngine/Explosion Control.cpp b/TileEngine/Explosion Control.cpp index b229c575..b4fbfb45 100644 --- a/TileEngine/Explosion Control.cpp +++ b/TileEngine/Explosion Control.cpp @@ -4500,6 +4500,69 @@ void HandleExplosionWarningAnimations( ) } } } + + // show known opponents + if (gGameSettings.fOptions[TOPTION_SHOW_ENEMY_LOCATION] && + gTacticalStatus.ubCurrentTeam == gbPlayerNum && + !gTacticalStatus.fAtLeastOneGuyOnMultiSelect && + pSoldier->stats.bLife >= OKLIFE && + !pSoldier->IsUnconscious() && + IS_MERC_BODY_TYPE(pSoldier) && + !pSoldier->IsSpotting()) + { + SOLDIERTYPE *pOpponent; + INT8 bKnowledge; + INT32 sSpot; + INT8 bLevel; + + // look through this man's personal & public opplists for opponents known + for (UINT32 uiLoop = 0; uiLoop < guiNumMercSlots; uiLoop++) + { + pOpponent = MercSlots[uiLoop]; + + // if this merc is inactive, at base, on assignment, or dead + if (!pOpponent || !ValidOpponent(pSoldier, pOpponent)) + { + continue; // next merc + } + + bKnowledge = Knowledge(pSoldier, pOpponent->ubID); + + // if this opponent is unknown personally and publicly + if (bKnowledge == NOT_HEARD_OR_SEEN || bKnowledge > SEEN_LAST_TURN || bKnowledge < HEARD_LAST_TURN) + { + continue; + } + + // obtain opponent's location and level + sSpot = KnownLocation(pSoldier, pOpponent->ubID); + bLevel = KnownLevel(pSoldier, pOpponent->ubID); + + if (TileIsOutOfBounds(sSpot)) + { + continue; + } + + if (pOpponent->bVisible != -1) + { + continue; + } + + // show location + usColor = Get16BPPColor(FROMRGB(96, 96, 96)); + sRadius = (INT32)(sqrt(0.5) * (20)); + + if (bLevel > 0) + { + DrawTraitRadius(sSpot, bLevel, sRadius, 2, usColor); + DrawTraitRadius(sSpot, bLevel, sRadius + 4, 2, usColor); + } + else + { + DrawTraitRadius(sSpot, bLevel, sRadius, 2, usColor); + } + } + } } } } diff --git a/Utils/_ChineseText.cpp b/Utils/_ChineseText.cpp index f1a20807..9c246926 100644 --- a/Utils/_ChineseText.cpp +++ b/Utils/_ChineseText.cpp @@ -6575,6 +6575,7 @@ STR16 zOptionsToggleText[] = L"显示LBE(携行具)物品", L"反转鼠标滚轮", //L"Invert mouse wheel", L"保持佣兵间距", // when multiple mercs are selected, they will try to keep their relative distances + L"Show enemy location", // show locator on last known enemy location L"--作弊模式选项--", // TOPTION_CHEAT_MODE_OPTIONS_HEADER, L"强制 Bobby Ray 送货", // force all pending Bobby Ray shipments L"-----------------", // TOPTION_CHEAT_MODE_OPTIONS_END @@ -6692,7 +6693,8 @@ STR16 zOptionsScreenHelpText[] = L"打开时,会直接显示该区域最后一个敌人的大致位置。", L"打开时,在区域物品栏界面,右键点击装有物品的携行具时可直接显示包含的物品。", L"打开时,反转鼠标滚轮方向。", - L"打开时,当选择了多个佣兵,他们在前进时会保持彼此的间距。(|C|t|r|l+|A|l|t+|G)", // L"When multiple mercs are selected, they will try to keep their relative distances while moving. (|C|t|r|l+|S|h|i|f|t+|G)", + L"When ON and multiple mercs are selected, they will try to keep their relative distances while moving.\n(press |C|t|r|l+|A|l|t+|G to toggle mode or |S|h|i|f|t + click to move in formation)", //TODO.Translate + L"When ON, shows last known enemy location.", //TODO.Translate L"(text not rendered)TOPTION_CHEAT_MODE_OPTIONS_HEADER", L"强制 Bobby Ray 出货", L"(text not rendered)TOPTION_CHEAT_MODE_OPTIONS_END", diff --git a/Utils/_DutchText.cpp b/Utils/_DutchText.cpp index 54c04899..2c305d2f 100644 --- a/Utils/_DutchText.cpp +++ b/Utils/_DutchText.cpp @@ -6577,6 +6577,7 @@ STR16 zOptionsToggleText[] = L"Show LBE Content", // TODO.Translate L"Invert mouse wheel", // TODO.Translate L"Formation Movement", // when multiple mercs are selected, they will try to keep their relative distances // TODO.Translate + L"Show enemy location", // show locator on last known enemy location L"--Cheat Mode Options--", // TOPTION_CHEAT_MODE_OPTIONS_HEADER, L"Force Bobby Ray shipments", // force all pending Bobby Ray shipments L"-----------------", // TOPTION_CHEAT_MODE_OPTIONS_END @@ -6694,7 +6695,8 @@ STR16 zOptionsScreenHelpText[] = L"When ON, approximate locations of the last enemies in the sector are highlighted.", // TODO.Translate L"When ON, show the contents of an LBE item, otherwise show the regular NAS interface.", // TODO.Translate L"When ON, inverts mouse wheel directions.", // TODO.Translate - L"When ON and multiple mercs are selected, they will try to keep their relative distances while moving. (|C|t|r|l+|A|l|t+|G)", // TODO.Translate + L"When ON and multiple mercs are selected, they will try to keep their relative distances while moving.\n(press |C|t|r|l+|A|l|t+|G to toggle mode or |S|h|i|f|t + click to move in formation)", //TODO.Translate + L"When ON, shows last known enemy location.", //TODO.Translate L"(text not rendered)TOPTION_CHEAT_MODE_OPTIONS_HEADER", L"Force all pending Bobby Ray shipments", L"(text not rendered)TOPTION_CHEAT_MODE_OPTIONS_END", diff --git a/Utils/_EnglishText.cpp b/Utils/_EnglishText.cpp index 1a51cdee..88a123d7 100644 --- a/Utils/_EnglishText.cpp +++ b/Utils/_EnglishText.cpp @@ -6575,6 +6575,7 @@ STR16 zOptionsToggleText[] = L"Show LBE Content", L"Invert Mouse Wheel", L"Formation Movement", // when multiple mercs are selected, they will try to keep their relative distances + L"Show enemy location", // show locator on last known enemy location L"--Cheat Mode Options--", // TOPTION_CHEAT_MODE_OPTIONS_HEADER, L"Force Bobby Ray Shipments", // force all pending Bobby Ray shipments L"-----------------", // TOPTION_CHEAT_MODE_OPTIONS_END @@ -6692,7 +6693,8 @@ STR16 zOptionsScreenHelpText[] = L"When ON, approximate locations of the last enemies in the sector will be highlighted.", L"When ON, will show the contents of an LBE item; otherwise, regular NAS interface will be shown.", L"When ON, inverts mouse wheel directions.", - L"When ON and multiple mercs are selected, they will try to keep their relative distances while moving. (|C|t|r|l+|A|l|t+|G)", + L"When ON and multiple mercs are selected, they will try to keep their relative distances while moving.\n(press |C|t|r|l+|A|l|t+|G to toggle mode or |S|h|i|f|t + click to move in formation)", + L"When ON, shows last known enemy location.", L"(text not rendered)TOPTION_CHEAT_MODE_OPTIONS_HEADER", L"Force all pending Bobby Ray shipments", L"(text not rendered)TOPTION_CHEAT_MODE_OPTIONS_END", diff --git a/Utils/_FrenchText.cpp b/Utils/_FrenchText.cpp index 9599c065..b10b3041 100644 --- a/Utils/_FrenchText.cpp +++ b/Utils/_FrenchText.cpp @@ -6581,9 +6581,10 @@ STR16 zOptionsToggleText[] = L"Situer ennemi restant", L"Afficher contenu LBE/DESC.", L"Inverser molette/souris", - L"Déplacement tactique", // when multiple mercs are selected, they will try to keep their relative distances + L"Déplacement tactique", // when multiple mercs are selected, they will try to keep their relative distances + L"Show enemy location", // show locator on last known enemy location L"--Options mode triche--", // TOPTION_CHEAT_MODE_OPTIONS_HEADER, - L"Forcer envois Bobby Ray", // force all pending Bobby Ray shipments + L"Forcer envois Bobby Ray", // force all pending Bobby Ray shipments L"-----------------", // TOPTION_CHEAT_MODE_OPTIONS_END L"--OPTIONS DE DEBUG--", // an example options screen options header (pure text) L"Afficher déviation balle", // Screen messages showing amount and direction of shot deviation. @@ -6698,7 +6699,8 @@ STR16 zOptionsScreenHelpText[] = L"Si activé, la zone où se trouve le reste des ennemis dans le secteur, est mis en évidence.", L"Si activé, montre le contenu d'un élément LBE quand la fenêtre de description est ouverte.", L"Si activé, inverse le sens de la molette de la souris.", - L"Lorsque plusieurs mercenaires sont sélectionnés, ils vont garder leurs distances en se déplaçant. (|C|t|r|l+|A|l|t+|G)", + L"When ON and multiple mercs are selected, they will try to keep their relative distances while moving.\n(press |C|t|r|l+|A|l|t+|G to toggle mode or |S|h|i|f|t + click to move in formation)", //TODO.Translate + L"When ON, shows last known enemy location.", //TODO.Translate L"(text not rendered)TOPTION_CHEAT_MODE_OPTIONS_HEADER", L"Forcer tous les envois en attente de Bobby Ray", L"(text not rendered)TOPTION_CHEAT_MODE_OPTIONS_END", diff --git a/Utils/_GermanText.cpp b/Utils/_GermanText.cpp index 913d67f2..5a3d3580 100644 --- a/Utils/_GermanText.cpp +++ b/Utils/_GermanText.cpp @@ -6448,6 +6448,7 @@ STR16 zOptionsToggleText[] = L"Tascheninhalt anzeigen", L"Mausradrichtung umkehren", L"Bewegung in Formation", // when multiple mercs are selected, they will try to keep their relative distances + L"Show enemy location", // show locator on last known enemy location L"--Cheat Mode Options--", // TOPTION_CHEAT_MODE_OPTIONS_HEADER, L"Erzwinge BR Lieferung", // force all pending Bobby Ray shipments L"-----------------", // TOPTION_CHEAT_MODE_OPTIONS_END @@ -6565,7 +6566,8 @@ STR16 zOptionsScreenHelpText[] = L"Wenn diese Funktion aktiviert ist, wird die ungefähre Postion der verbleibenden Feinde auf der Übersichtskarte schraffiert", L"Wenn diese Funktion aktiviert ist, wird in der erweiterten Beschreibung von Taschen statt den Anbauteilen deren Inhalt angezeigt.", L"Wenn diese Funktion aktiviert ist, wird die Mausradrichtung umgekehrt", - L"Wenn diese Funktion aktiviert ist und mehrere Sölnder ausgewählt sind, werden sich diese in Formation (in relativen Abständen zueinander) bewegen. (|C|t|r|l+|A|l|t+|G)", + L"When ON and multiple mercs are selected, they will try to keep their relative distances while moving.\n(press |C|t|r|l+|A|l|t+|G to toggle mode or |S|h|i|f|t + click to move in formation)", //TODO.Translate + L"When ON, shows last known enemy location.", //TODO.Translate L"(text not rendered)TOPTION_CHEAT_MODE_OPTIONS_HEADER", L"Force all pending Bobby Ray shipments", L"(text not rendered)TOPTION_CHEAT_MODE_OPTIONS_END", diff --git a/Utils/_ItalianText.cpp b/Utils/_ItalianText.cpp index 372db194..ba42d4f2 100644 --- a/Utils/_ItalianText.cpp +++ b/Utils/_ItalianText.cpp @@ -6560,6 +6560,7 @@ STR16 zOptionsToggleText[] = L"Show LBE Content", // TODO.Translate L"Invert mouse wheel", // TODO.Translate L"Formation Movement", // when multiple mercs are selected, they will try to keep their relative distances // TODO.Translate + L"Show enemy location", // show locator on last known enemy location L"--Cheat Mode Options--", // TOPTION_CHEAT_MODE_OPTIONS_HEADER, L"Force Bobby Ray shipments", // force all pending Bobby Ray shipments L"-----------------", // TOPTION_CHEAT_MODE_OPTIONS_END @@ -6677,7 +6678,8 @@ STR16 zOptionsScreenHelpText[] = L"When ON, approximate locations of the last enemies in the sector are highlighted.", // TODO.Translate L"When ON, show the contents of an LBE item, otherwise show the regular NAS interface.", // TODO.Translate L"When ON, inverts mouse wheel directions.", // TODO.Translate - L"When ON and multiple mercs are selected, they will try to keep their relative distances while moving. (|C|t|r|l+|A|l|t+|G)", // TODO.Translate + L"When ON and multiple mercs are selected, they will try to keep their relative distances while moving.\n(press |C|t|r|l+|A|l|t+|G to toggle mode or |S|h|i|f|t + click to move in formation)", //TODO.Translate + L"When ON, shows last known enemy location.", //TODO.Translate L"(text not rendered)TOPTION_CHEAT_MODE_OPTIONS_HEADER", L"Force all pending Bobby Ray shipments", L"(text not rendered)TOPTION_CHEAT_MODE_OPTIONS_END", diff --git a/Utils/_PolishText.cpp b/Utils/_PolishText.cpp index 21b44b9d..327a341b 100644 --- a/Utils/_PolishText.cpp +++ b/Utils/_PolishText.cpp @@ -6579,6 +6579,7 @@ STR16 zOptionsToggleText[] = L"Show LBE Content", // TODO.Translate L"Invert mouse wheel", // TODO.Translate L"Formation Movement", // when multiple mercs are selected, they will try to keep their relative distances // TODO.Translate + L"Show enemy location", // show locator on last known enemy location L"--Cheat Mode Options--", // TOPTION_CHEAT_MODE_OPTIONS_HEADER, L"Force Bobby Ray shipments", // force all pending Bobby Ray shipments L"-----------------", // TOPTION_CHEAT_MODE_OPTIONS_END @@ -6696,7 +6697,8 @@ STR16 zOptionsScreenHelpText[] = L"When ON, approximate locations of the last enemies in the sector are highlighted.", // TODO.Translate L"When ON, show the contents of an LBE item, otherwise show the regular NAS interface.", // TODO.Translate L"When ON, inverts mouse wheel directions.", // TODO.Translate - L"When ON and multiple mercs are selected, they will try to keep their relative distances while moving. (|C|t|r|l+|A|l|t+|G)", // TODO.Translate + L"When ON and multiple mercs are selected, they will try to keep their relative distances while moving.\n(press |C|t|r|l+|A|l|t+|G to toggle mode or |S|h|i|f|t + click to move in formation)", //TODO.Translate + L"When ON, shows last known enemy location.", //TODO.Translate L"(text not rendered)TOPTION_CHEAT_MODE_OPTIONS_HEADER", L"Wymuś wszystkie oczekiwane dostawy od Bobby Ray's.", L"(text not rendered)TOPTION_CHEAT_MODE_OPTIONS_END", diff --git a/Utils/_RussianText.cpp b/Utils/_RussianText.cpp index 8aef6e83..a0a7277a 100644 --- a/Utils/_RussianText.cpp +++ b/Utils/_RussianText.cpp @@ -6571,6 +6571,7 @@ STR16 zOptionsToggleText[] = L"Показать содержимое разгрузки", L"Инвертировать колесо мыши", L"Боевой порядок", // when multiple mercs are selected, they will try to keep their relative distances + L"Показывать расположение", // show locator on last known enemy location L"--Читерские настройки--", // TOPTION_CHEAT_MODE_OPTIONS_HEADER, L"Ускорить доставку Бобби Рэя", // force all pending Bobby Ray shipments L"-----------------", // TOPTION_CHEAT_MODE_OPTIONS_END @@ -6688,7 +6689,8 @@ STR16 zOptionsScreenHelpText[] = L"Если включено, указывается примерное\nположение последних врагов в секторе.", L"Если включено, показывает содержимое разгрузки,\nиначе - обычный интерфейс новой системы навески.", L"Если включено, инвертирует направление\nпрокрутки колеса мыши.", - L"Если выбрано несколько наёмников,\nони будут пытаться сохранять взаимное расположение\nи дистанцию при движении (|C|t|r|l+|A|l|t+|G).", + L"Если выбрано несколько наёмников,\nони будут пытаться сохранять взаимное расположение\nи дистанцию при движении\n(нажмите |C|t|r|l+|A|l|t+|G для переключения или |S|h|i|f|t + клик для движения).", + L"Если включено, показывает известное расположение противника\n(нажмите |S|h|i|f|t, чтобы показать источник шума).", L"(text not rendered)TOPTION_CHEAT_MODE_OPTIONS_HEADER", L"Выберите этот пункт,\nчтобы груз Бобби Рэя прибыл немедленно.", L"(text not rendered)TOPTION_CHEAT_MODE_OPTIONS_END",