(PR#11066) Units that cannot be obsoleted trigger assert for AI

"Gregory Berkolaiko" <[email protected]> Wed, 17 Nov 2004 22:03:44 -0800
Newsgroups gmane.games.freeciv.ai
Message-ID <[email protected]>
<URL: http://rt.freeciv.org/Ticket/Display.html?id=11066 >

In advmilitary.c:
819  !can_build_unit_direct(pcity, unit_types[unit_type].obsoleted_by))

But obsoleted_by can be -1 (meaning nobody obsoletes it).  But
can_build_unit functions have just been made more strict, which causes
and assert.

I attach a patch but would rather have can_build_unit_* changed to the
previous behaviour -- if a looney type is supplied, the answer is of
course FALSE.

Gr
obsoleted.diff (text/plain, 925 B)
Index: ai/advmilitary.c
===================================================================
RCS file: /home/freeciv/CVS/freeciv/ai/advmilitary.c,v
retrieving revision 1.176
diff -u -r1.176 advmilitary.c
--- ai/advmilitary.c	30 Oct 2004 14:04:54 -0000	1.176
+++ ai/advmilitary.c	18 Nov 2004 05:59:35 -0000
@@ -815,8 +815,10 @@
     
     if ((move_type == LAND_MOVING || (move_type == SEA_MOVING && shore))
         && tech_req != A_LAST
-        && (tech_dist > 0 ||
-            !can_build_unit_direct(pcity, unit_types[unit_type].obsoleted_by))
+        && (tech_dist > 0 
+            || unit_types[unit_type].obsoleted_by == -1
+            || !can_build_unit_direct(pcity, 
+                                      unit_types[unit_type].obsoleted_by))
         && unit_types[unit_type].attack_strength > 0 /* or we'll get SIGFPE */
         && move_type == orig_move_type) {
       /* TODO: Case for Airport. -- Raahul */