From b03cfb2bf1f02416f39ae4d074ae1d651a93692e Mon Sep 17 00:00:00 2001
From: Marko Lindqvist <cazfi74@gmail.com>
Date: Thu, 9 May 2024 06:40:03 +0300
Subject: [PATCH 66/66] Add support for Local range TechFlag requirements

See RM #573

Signed-off-by: Marko Lindqvist <cazfi74@gmail.com>
---
 common/requirements.c | 13 ++++++++++---
 doc/README.effects    |  2 +-
 2 files changed, 11 insertions(+), 4 deletions(-)

diff --git a/common/requirements.c b/common/requirements.c
index 055f4d55ca..238d4e480a 100644
--- a/common/requirements.c
+++ b/common/requirements.c
@@ -1168,12 +1168,12 @@ struct requirement req_from_str(const char *type, const char *range,
     case VUT_EXTRAFLAG:
       invalid = (req.range > REQ_RANGE_TRADE_ROUTE);
       break;
-    case VUT_TECHFLAG:
     case VUT_ACHIEVEMENT:
     case VUT_MINTECHS:
       invalid = (req.range < REQ_RANGE_PLAYER);
       break;
     case VUT_ADVANCE:
+    case VUT_TECHFLAG:
       invalid = (req.range < REQ_RANGE_PLAYER
                  && req.range != REQ_RANGE_LOCAL);
       break;
@@ -2481,7 +2481,7 @@ is_techflag_req_active(const struct civ_map *nmap,
 
   switch (req->range) {
   case REQ_RANGE_PLAYER:
-    if (NULL != context->player) {
+    if (context->player != nullptr) {
       return BOOL_TO_TRISTATE(player_knows_techs_with_flag(context->player,
                                                            techflag));
     } else {
@@ -2490,7 +2490,7 @@ is_techflag_req_active(const struct civ_map *nmap,
     break;
   case REQ_RANGE_TEAM:
   case REQ_RANGE_ALLIANCE:
-    if (NULL == context->player) {
+    if (context->player == nullptr) {
       return TRI_MAYBE;
     }
     players_iterate_alive(plr2) {
@@ -2509,6 +2509,13 @@ is_techflag_req_active(const struct civ_map *nmap,
 
     return TRI_NO;
   case REQ_RANGE_LOCAL:
+    if (context->player == nullptr) {
+      return TRI_MAYBE;
+    }
+    if (advance_has_flag(research_get(context->player)->researching, techflag)) {
+      return TRI_YES;
+    }
+    return TRI_NO;
   case REQ_RANGE_TILE:
   case REQ_RANGE_CADJACENT:
   case REQ_RANGE_ADJACENT:
diff --git a/doc/README.effects b/doc/README.effects
index e57e703289..af8949a192 100644
--- a/doc/README.effects
+++ b/doc/README.effects
@@ -58,7 +58,7 @@ Requirement types and supported ranges
 ======================================
 
 Tech:            World, Alliance, Team, Player, Local
-TechFlag:        World, Alliance, Team, Player
+TechFlag:        World, Alliance, Team, Player, Local
 MinTechs:        World, Player
 MinCities:       Player
 Achievement:     World, Alliance, Team, Player
-- 
2.43.0

