From bdd93c7fdc6c846df968fee421ae40e48331195e Mon Sep 17 00:00:00 2001
From: Marko Lindqvist <cazfi74@gmail.com>
Date: Thu, 14 May 2026 16:30:53 +0300
Subject: [PATCH 37/37] AI: Enable rampage when unit can do Nuke Tile attack

See RM #2026

Signed-off-by: Marko Lindqvist <cazfi74@gmail.com>
---
 ai/default/daiunit.c | 50 +++++++++++++++++++++++++++++++-------------
 ai/default/daiunit.h |  3 ++-
 2 files changed, 38 insertions(+), 15 deletions(-)

diff --git a/ai/default/daiunit.c b/ai/default/daiunit.c
index a1eef223b6..1096f91846 100644
--- a/ai/default/daiunit.c
+++ b/ai/default/daiunit.c
@@ -443,29 +443,51 @@ static bool is_my_turn(struct unit *punit, struct unit *pdef)
 **************************************************************************/
 enum gen_action dai_select_tile_attack_action(struct civ_map *nmap,
                                               struct unit *punit,
-                                              struct tile *ptile)
+                                              struct tile *ptile,
+                                              enum action_target_kind *kind)
 {
   enum gen_action selected;
 
   if ((selected = select_actres_action_unit_on_stack(nmap, ACTRES_CAPTURE_UNITS,
                                                      punit, ptile))
-      == ACTION_NONE
-      && (selected = select_actres_action_unit_on_stack(nmap, ACTRES_COLLECT_RANSOM,
+      != ACTION_NONE
+      || (selected = select_actres_action_unit_on_stack(nmap, ACTRES_COLLECT_RANSOM,
                                                         punit, ptile))
-      == ACTION_NONE
-      && (selected = select_actres_action_unit_on_stack(nmap, ACTRES_BOMBARD,
+      != ACTION_NONE
+      || (selected = select_actres_action_unit_on_stack(nmap, ACTRES_BOMBARD,
                                                         punit, ptile))
-      == ACTION_NONE
-      && (selected = select_actres_action_unit_on_stack(nmap, ACTRES_NUKE_UNITS,
+      != ACTION_NONE
+      || (selected = select_actres_action_unit_on_stack(nmap, ACTRES_NUKE_UNITS,
                                                         punit, ptile))
-      == ACTION_NONE
-      && (selected = select_actres_action_unit_on_stack(nmap, ACTRES_ATTACK,
-                                                        punit, ptile))
-      == ACTION_NONE) {
-    return ACTION_NONE;
+      != ACTION_NONE) {
+    if (kind != nullptr) {
+      *kind = ATK_STACK;
+    }
+
+    return selected;
+  }
+
+  if ((selected = select_actres_action_unit_on_tile(nmap, ACTRES_NUKE,
+                                                    punit, ptile))
+      != ACTION_NONE) {
+    if (kind != nullptr) {
+      *kind = ATK_TILE;
+    }
+
+    return selected;
+  }
+
+  if ((selected = select_actres_action_unit_on_stack(nmap, ACTRES_ATTACK,
+                                                     punit, ptile))
+      != ACTION_NONE) {
+    if (kind != nullptr) {
+      *kind = ATK_STACK;
+    }
+
+    return selected;
   }
 
-  return selected;
+  return ACTION_NONE;
 }
 
 /**********************************************************************//**
@@ -495,7 +517,7 @@ static int dai_rampage_want(struct unit *punit, struct tile *ptile)
   if (can_unit_attack_tile(punit, nullptr, ptile)
       && (pdef = get_defender(nmap, punit, ptile, nullptr))
       /* Action enablers might prevent attacking */
-      && dai_select_tile_attack_action(nmap, punit, ptile) != ACTION_NONE) {
+      && dai_select_tile_attack_action(nmap, punit, ptile, nullptr) != ACTION_NONE) {
     /* See description of kill_desire() about these variables. */
     int attack = unit_att_rating_now(punit);
     int benefit = stack_cost(punit, pdef);
diff --git a/ai/default/daiunit.h b/ai/default/daiunit.h
index 7af80492ed..ab44ec4176 100644
--- a/ai/default/daiunit.h
+++ b/ai/default/daiunit.h
@@ -173,6 +173,7 @@ void dai_switch_to_explore(struct ai_type *ait, struct unit *punit,
 
 enum gen_action dai_select_tile_attack_action(struct civ_map *nmap,
                                               struct unit *punit,
-                                              struct tile *ptile);
+                                              struct tile *ptile,
+                                              enum action_target_kind *kind);
 
 #endif /* FC__DAIUNIT_H */
-- 
2.53.0

