Complete.Org: Mailing Lists: Archives: freeciv-ai: September 2004:
[freeciv-ai] patch to make the AI be more defensive
Home

[freeciv-ai] patch to make the AI be more defensive

[Top] [All Lists]

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index] [Thread Index]
To: freeciv-ai@xxxxxxxxxxx
Subject: [freeciv-ai] patch to make the AI be more defensive
From: Jordi Negrevernis i Font <jorneg@xxxxxxxxxxx>
Date: Mon, 13 Sep 2004 19:01:10 +0200


   This patch makes 2 thinks:

- Considers defensive units those with flag L_DEFEND_GOOD amb L_DEFEND_OK. I don't know why the L-DEFEND_OK units are not considered for when choosing a bodyguard.

- Before attacking, after rampage, the unit checks to see if it can find a weak city or unit to protect.

I run an autogame and did not see empty cities near enemy territory... maybe is some luck!


diff -u -r -b -Xfreeciv-cvs-Aug-16/diff_ignore freeciv-cvs-Aug-16/ai/aiunit.c 
freeciv-cvs-Aug-16-protect/ai/aiunit.c
--- freeciv-cvs-Aug-16/ai/aiunit.c      2004-08-29 17:11:39.000000000 +0200
+++ freeciv-cvs-Aug-16-protect/ai/aiunit.c      2004-09-13 13:20:33.000000000 
+0200
@@ -889,7 +889,7 @@
   if (unit_types[type].move_type != LAND_MOVING) {
     return FALSE; /* temporary kluge */
   }
-  return (unit_has_role(type, L_DEFEND_GOOD));
+  return (unit_has_role(type, L_DEFEND_GOOD) || unit_has_role(type, 
L_DEFEND_OK));
 }
 
 /*************************************************************************
@@ -1735,6 +1735,9 @@
   int id = punit->id;
   int ct = 10;
   struct city *pcity = NULL;
+  struct city *acity = NULL;
+  struct unit *aunit = NULL;
+  int val = 0;
 
   CHECK_UNIT(punit);
 
@@ -1753,6 +1756,22 @@
     return;
   }
 
+  /* now, if we are a good defender, we try to find a some gays to escort */
+  if (unit_role_defender(punit->type)) {
+    val = look_for_charge(pplayer, punit, &aunit, &acity);
+    if (val > 0) {
+      if (acity) {
+        ai_unit_new_role(punit, AIUNIT_ESCORT, acity->x, acity->y);
+        punit->ai.charge = acity->id;
+        BODYGUARD_LOG(LOG_DEBUG, punit, "going to defend city (was going to 
attack)");
+      } else if (aunit) {
+        ai_unit_new_role(punit, AIUNIT_ESCORT, aunit->x, aunit->y);
+        punit->ai.charge = aunit->id;
+        BODYGUARD_LOG(LOG_DEBUG, punit, "going to defend unit (was going to 
attack)");
+      }
+    }
+  }
+
   /* Main attack loop */
   do {
     if (stay_and_defend(punit)) {

[Prev in Thread] Current Thread [Next in Thread]
  • [freeciv-ai] patch to make the AI be more defensive, Jordi Negrevernis i Font <=