diff -Nur -X/home/thue/freeciv-dev/no.freeciv /home/thue/freeciv-dev/freeciv/common/city.c transitive_upgrades2/common/city.c --- /home/thue/freeciv-dev/freeciv/common/city.c Mon Apr 3 21:43:00 2000 +++ transitive_upgrades2/common/city.c Sat Apr 8 00:43:30 2000 @@ -556,8 +556,9 @@ { if (!can_build_unit_direct(pcity, id)) return 0; - if (can_build_unit_direct(pcity, unit_types[id].obsoleted_by)) - return 0; + while(unit_type_exists((id = unit_types[id].obsoleted_by))) + if (can_player_build_unit_direct(city_owner(pcity), id)) + return 0; return 1; } @@ -588,8 +589,9 @@ { if (!can_player_build_unit_direct(p, id)) return 0; - if (can_player_build_unit_direct(p, unit_types[id].obsoleted_by)) - return 0; + while(unit_type_exists((id = unit_types[id].obsoleted_by))) + if (can_player_build_unit_direct(p, id)) + return 0; return 1; } @@ -602,8 +604,9 @@ { if (!unit_type_exists(id)) return 0; - if (can_player_build_unit_direct(p, unit_types[id].obsoleted_by)) - return 0; + while(unit_type_exists((id = unit_types[id].obsoleted_by))) + if (can_player_build_unit_direct(p, id)) + return 0; return 1; } diff -Nur -X/home/thue/freeciv-dev/no.freeciv /home/thue/freeciv-dev/freeciv/server/cityturn.c transitive_upgrades2/server/cityturn.c --- /home/thue/freeciv-dev/freeciv/server/cityturn.c Mon Apr 3 21:43:05 2000 +++ transitive_upgrades2/server/cityturn.c Sat Apr 8 01:18:07 2000 @@ -1132,13 +1132,13 @@ **************************************************************************/ static Unit_Type_id upgrade_unit(struct city *pcity, Unit_Type_id id) { - while(can_build_unit_direct(pcity, id) && - can_build_unit_direct(pcity, unit_types[id].obsoleted_by)) - { - id = unit_types[id].obsoleted_by; + Unit_Type_id latest_ok = id; + while(unit_type_exists(id= unit_types[id].obsoleted_by)) { + if (can_build_unit_direct(pcity, id)) + latest_ok = id; } - return id; + return latest_ok; } /**************************************************************************