diff -ruN -X ../patch/diff_ignore 20011215-1800/ai/advdomestic.c caravan/ai/advdomestic.c --- 20011215-1800/ai/advdomestic.c Sat Dec 15 19:09:44 2001 +++ caravan/ai/advdomestic.c Tue Dec 18 23:46:43 2001 @@ -243,7 +243,7 @@ if (!unit_type_flag(acity->currently_building, F_NONMIL) && unit_types[acity->currently_building].move_type == LAND_MOVING) j += prod; - else if (unit_type_flag(acity->currently_building, F_CARAVAN) && + else if (unit_type_flag(acity->currently_building, F_HELP_WONDER) && built_elsewhere(acity, B_SUNTZU)) j += prod; /* this also stops flip-flops */ } else if (acity->currently_building == B_BARRACKS || /* this stops flip-flops */ acity->currently_building == B_BARRACKS2 || @@ -599,12 +599,12 @@ } unit_list_iterate(pplayer->units, punit) - if (unit_flag(punit, F_CARAVAN) && + if (unit_flag(punit, F_HELP_WONDER) && map_get_continent(punit->x, punit->y) == con) vans++; unit_list_iterate_end; city_list_iterate(pplayer->cities, acity) if (acity->is_building_unit && acity->shield_stock >= 50 && - unit_type_flag(acity->currently_building, F_CARAVAN) && + (unit_type_flag(acity->currently_building, F_HELP_WONDER)) && map_get_continent(acity->x, acity->y) == con) vans++; city_list_iterate_end; @@ -617,18 +617,18 @@ /* if we just started building a wonder during a_c_c_b, the started_building */ /* notify comes equipped with an update. It calls generate_warmap, but this */ /* is a lot less warmap generation than there would be otherwise. -- Syela */ - iunit = best_role_unit(pcity, F_CARAVAN); + iunit = best_role_unit(pcity, F_HELP_WONDER); dw = pcity->ai.distance_to_wonder_city * 8 / ((iunit==U_LAST) ? SINGLE_MOVE : get_unit_type(iunit)->move_rate); want -= dw; /* value of 8 is a total guess and could be wrong, * but it's better than 0 -- Syela */ - iunit = get_role_unit(F_CARAVAN, 0); + iunit = get_role_unit(F_HELP_WONDER, 0); if (can_build_unit_direct(pcity, iunit)) { if (want > choice->want) { choice->want = want; choice->type = CT_NONMIL; - ai_choose_role_unit(pplayer, pcity, choice, F_CARAVAN, dw/2); + ai_choose_role_unit(pplayer, pcity, choice, F_HELP_WONDER, dw/2); } } else pplayer->ai.tech_want[get_unit_type(iunit)->tech_requirement] += want; @@ -646,7 +646,7 @@ /* allowing buy of peaceful units after much testing -- Syela */ if (!choice->want) { /* oh dear, better think of something! */ - iunit = best_role_unit(pcity, F_CARAVAN); + iunit = best_role_unit(pcity, F_TRADE_ROUTE); if (iunit == U_LAST) { iunit = best_role_unit(pcity, F_DIPLOMAT); /* someday, real diplomat code will be here! */ diff -ruN -X ../patch/diff_ignore 20011215-1800/ai/advmilitary.c caravan/ai/advmilitary.c --- 20011215-1800/ai/advmilitary.c Sat Dec 15 19:09:44 2001 +++ caravan/ai/advmilitary.c Tue Dec 18 22:49:32 2001 @@ -1086,7 +1086,7 @@ if (!pcity->is_building_unit && is_wonder(pcity->currently_building)) wondercity = map_get_continent(pcity->x, pcity->y); else wondercity = 0; - freight = best_role_unit(pcity, F_CARAVAN); + freight = best_role_unit(pcity, F_HELP_WONDER); moverate = (freight==U_LAST) ? SINGLE_MOVE : get_unit_type(freight)->move_rate; pcity->ai.downtown = 0; diff -ruN -X ../patch/diff_ignore 20011215-1800/ai/aicity.c caravan/ai/aicity.c --- 20011215-1800/ai/aicity.c Sat Dec 15 19:09:44 2001 +++ caravan/ai/aicity.c Sat Dec 15 19:53:48 2001 @@ -84,7 +84,7 @@ Unit_Type_id i; if (is_building_other_wonder(pcity)) { - i = best_role_unit(pcity, F_CARAVAN); + i = best_role_unit(pcity, F_HELP_WONDER); if (i < U_LAST) { ai_do_build_unit(pcity, i); return 1; @@ -420,7 +420,8 @@ pcity->food_stock < city_granary_size(pcity->size-1))) ; else if (bestchoice.type && bestchoice.type < 3 && /* not a defender */ buycost > unit_types[bestchoice.choice].build_cost * 2) { /* too expensive */ - if (unit_type_flag(bestchoice.choice, F_CARAVAN) && + if ((unit_type_flag(bestchoice.choice, F_TRADE_ROUTE) || + unit_type_flag(bestchoice.choice, F_HELP_WONDER)) && pplayer->ai.maxbuycost < 100) pplayer->ai.maxbuycost = 100; } #ifdef GRAVEDANGERWORKS @@ -458,7 +459,8 @@ /* possibly upgrade units here */ } /* end panic subroutine */ if (is_unit_choice_type(bestchoice.type) && - unit_type_flag(bestchoice.choice, F_CARAVAN)) { + (unit_type_flag(bestchoice.choice, F_TRADE_ROUTE) || + unit_type_flag(bestchoice.choice, F_HELP_WONDER))) { if (buycost > pplayer->ai.maxbuycost) pplayer->ai.maxbuycost = buycost; /* Gudy reminded me AI was slow to build wonders, I thought of the above -- Syela */ diff -ruN -X ../patch/diff_ignore 20011215-1800/ai/aiunit.c caravan/ai/aiunit.c --- 20011215-1800/ai/aiunit.c Sat Dec 15 19:09:44 2001 +++ caravan/ai/aiunit.c Tue Dec 18 23:57:11 2001 @@ -272,7 +272,7 @@ && can_unit_move_to_tile_with_notify(punit, x1, y1, 0) && !((pcity = map_get_city(x1,y1)) && (unit_flag(punit, F_DIPLOMAT) - || unit_flag(punit, F_CARAVAN))) + || unit_flag(punit, F_TRADE_ROUTE))) && !(is_barbarian(pplayer) && map_get_special(x1, y1) & S_HUT)) { most_unknown = unknown; best_x = x1; @@ -1386,7 +1386,8 @@ unit_list_iterate(aplayer->units, aunit) if (map_get_city(aunit->x, aunit->y)) continue; /* already dealt with it */ if (handicap && !map_get_known(aunit->x, aunit->y, pplayer)) continue; - if (unit_flag(aunit, F_CARAVAN) && !punit->id) continue; /* kluge */ + if ((unit_flag(aunit, F_TRADE_ROUTE) || unit_flag(aunit, F_HELP_WONDER)) + && !punit->id) continue; /* kluge */ if (ai_fuzzy(pplayer,1) && (aunit == get_defender(punit, aunit->x, aunit->y) && ((is_ground_unit(punit) && @@ -1556,48 +1557,47 @@ if (punit->activity != ACTIVITY_IDLE) return; if (punit->ai.ai_role == AIUNIT_NONE) { - if ((pcity = wonder_on_continent(pplayer, map_get_continent(punit->x, punit->y))) && - build_points_left(pcity) > (pcity->shield_surplus*2)) { + if ((pcity = wonder_on_continent(pplayer, map_get_continent(punit->x, punit->y))) + && unit_flag(punit, F_HELP_WONDER) + && build_points_left(pcity) > (pcity->shield_surplus*2)) { if (!same_pos(pcity->x, pcity->y, punit->x, punit->y)) { if (!punit->moves_left) return; - auto_settler_do_goto(pplayer,punit, pcity->x, pcity->y); + auto_settler_do_goto(pplayer,punit, pcity->x, pcity->y); handle_unit_activity_request(punit, ACTIVITY_IDLE); } else { - /* - * We really don't want to just drop all caravans in immediately. - * Instead, we want to aggregate enough caravans to build instantly. - * -AJS, 990704 - */ - req.unit_id = punit->id; - req.city_id = pcity->id; - handle_unit_help_build_wonder(pplayer, &req); + /* + * We really don't want to just drop all caravans in immediately. + * Instead, we want to aggregate enough caravans to build instantly. + * -AJS, 990704 + */ + req.unit_id = punit->id; + req.city_id = pcity->id; + handle_unit_help_build_wonder(pplayer, &req); } - } - else { - /* A caravan without a home? Kinda strange, but it might happen. */ - pcity=player_find_city_by_id(pplayer, punit->homecity); - city_list_iterate(pplayer->cities,pdest) - if (pcity - && can_establish_trade_route(pcity, pdest) - && map_get_continent(pcity->x, pcity->y) == map_get_continent(pdest->x, pdest->y)) { - tradeval=trade_between_cities(pcity, pdest); - if (tradeval) { - if (best < tradeval) { - best=tradeval; - best_city=pdest->id; - } - } - } - city_list_iterate_end; - pcity=player_find_city_by_id(pplayer, best_city); - if (pcity) { - if (!same_pos(pcity->x, pcity->y, punit->x, punit->y)) { - if (!punit->moves_left) return; - auto_settler_do_goto(pplayer,punit, pcity->x, pcity->y); - } else { - req.unit_id = punit->id; - req.city_id = pcity->id; - handle_unit_establish_trade(pplayer, &req); + } else { + /* A caravan without a home? Kinda strange, but it might happen. */ + pcity=player_find_city_by_id(pplayer, punit->homecity); + city_list_iterate(pplayer->cities,pdest) { + if (pcity && can_establish_trade_route(pcity, pdest) && + map_get_continent(pcity->x, pcity->y) == map_get_continent(pdest->x, pdest->y)) { + tradeval=trade_between_cities(pcity, pdest); + if (tradeval) { + if (best < tradeval) { + best=tradeval; + best_city=pdest->id; + } + } + } + } city_list_iterate_end; + pcity=player_find_city_by_id(pplayer, best_city); + if (pcity) { + if (!same_pos(pcity->x, pcity->y, punit->x, punit->y)) { + if (!punit->moves_left) return; + auto_settler_do_goto(pplayer,punit, pcity->x, pcity->y); + } else { + req.unit_id = punit->id; + req.city_id = pcity->id; + handle_unit_establish_trade(pplayer, &req); } } } @@ -1833,12 +1833,16 @@ /************************************************************************** manage one unit Careful: punit may have been destroyed upon return from this routine! + Gregor: This function is a very limited approach because if a unit has + several flags the first one in order of apprerance in this function + will be used. **************************************************************************/ static void ai_manage_unit(struct player *pplayer, struct unit *punit) { /* retire useless barbarian units here, before calling the management function */ if( is_barbarian(pplayer) ) { + /* Todo: should be configurable */ if( unit_can_be_retired(punit) && myrand(100) > 90 ) { wipe_unit(punit); return; @@ -1864,7 +1868,8 @@ if (!punit->moves_left) return; /* can't do anything with no moves */ ai_manage_settler(pplayer, punit); return; - } else if (unit_flag(punit, F_CARAVAN)) { + } else if (unit_flag(punit, F_TRADE_ROUTE) + || unit_flag(punit, F_HELP_WONDER)) { ai_manage_caravan(pplayer, punit); return; } else if (unit_has_role(punit->type, L_BARBARIAN_LEADER)) { @@ -1882,6 +1887,8 @@ ai_manage_explorer(punit); /* what else could this be? -- Syela */ return; } + assert(0); + exit(0); /* should never get here */ } diff -ruN -X ../patch/diff_ignore 20011215-1800/client/control.c caravan/client/control.c --- 20011215-1800/client/control.c Sat Dec 15 19:09:38 2001 +++ caravan/client/control.c Sat Dec 15 19:41:41 2001 @@ -1599,7 +1599,7 @@ void key_unit_build_wonder(void) { if(get_unit_in_focus()) - if(unit_flag(punit_focus, F_CARAVAN)) + if(unit_flag(punit_focus, F_HELP_WONDER)) request_unit_caravan_action(punit_focus, PACKET_UNIT_HELP_BUILD_WONDER); } @@ -1790,7 +1790,7 @@ void key_unit_traderoute(void) { if(get_unit_in_focus()) - if(unit_flag(punit_focus, F_CARAVAN)) + if(unit_flag(punit_focus, F_TRADE_ROUTE)) request_unit_caravan_action(punit_focus, PACKET_UNIT_ESTABLISH_TRADE); } diff -ruN -X ../patch/diff_ignore 20011215-1800/client/gui-gtk/menu.c caravan/client/gui-gtk/menu.c --- 20011215-1800/client/gui-gtk/menu.c Sat Dec 15 19:09:36 2001 +++ caravan/client/gui-gtk/menu.c Sat Dec 15 19:41:41 2001 @@ -1051,7 +1051,7 @@ punit->x, punit->y))); menus_set_sensitive("
/_Orders/Explode Nuclear", unit_flag(punit, F_NUCLEAR)); - if (unit_flag(punit, F_CARAVAN)) + if (unit_flag(punit, F_HELP_WONDER)) menus_rename("
/_Orders/_Build City", _("Help _Build Wonder")); else if (unit_flag(punit, F_CITIES)) { if (map_get_city(punit->x, punit->y)) @@ -1062,7 +1062,7 @@ else menus_rename("
/_Orders/_Build City", _("_Build City")); - if (unit_flag(punit, F_CARAVAN)) + if (unit_flag(punit, F_TRADE_ROUTE)) menus_rename("
/_Orders/Build _Road", _("Make Trade _Route")); else if (unit_flag(punit, F_SETTLERS)) { if (map_get_tile(punit->x,punit->y)->special&S_ROAD) { diff -ruN -X ../patch/diff_ignore 20011215-1800/client/helpdata.c caravan/client/helpdata.c --- 20011215-1800/client/helpdata.c Sat Dec 15 19:09:39 2001 +++ caravan/client/helpdata.c Wed Dec 19 00:00:00 2001 @@ -599,9 +599,11 @@ utype->transport_capacity); } } - if (unit_type_flag(i, F_CARAVAN)) { - sprintf(buf+strlen(buf), - _("* Can establish trade routes and help build wonders.\n")); + if (unit_type_flag(i, F_TRADE_ROUTE)) { + sprintf(buf+strlen(buf), _("* Can establish trade routes.\n")); + } + if (unit_type_flag(i, F_HELP_WONDER)) { + sprintf(buf+strlen(buf), _("* Can help build wonders.\n")); } if (unit_type_flag(i, F_CITIES)) { sprintf(buf+strlen(buf), _("* Can build new cities.\n")); diff -ruN -X ../patch/diff_ignore 20011215-1800/client/packhand.c caravan/client/packhand.c --- 20011215-1800/client/packhand.c Sat Dec 15 19:09:34 2001 +++ caravan/client/packhand.c Sat Dec 15 19:38:41 2001 @@ -908,7 +908,7 @@ else refresh_city_dialog(pcity); - if(unit_flag(punit, F_CARAVAN) + if((unit_flag(punit, F_TRADE_ROUTE) || unit_flag(punit, F_HELP_WONDER)) && (!game.player_ptr->ai.control || ai_popup_windows) && punit->owner==game.player_idx && (punit->activity!=ACTIVITY_GOTO || diff -ruN -X ../patch/diff_ignore 20011215-1800/common/unit.c caravan/common/unit.c --- 20011215-1800/common/unit.c Sat Dec 15 19:09:33 2001 +++ caravan/common/unit.c Sat Dec 15 19:38:41 2001 @@ -185,7 +185,7 @@ && !same_pos(punit->x, punit->y, pcity->x, pcity->y)) return 0; - return unit_flag(punit, F_CARAVAN) + return unit_flag(punit, F_HELP_WONDER) && punit->owner==pcity->owner && !pcity->is_building_unit && is_wonder(pcity->currently_building) @@ -210,7 +210,7 @@ { struct city *phomecity, *pdestcity; - if (!unit_flag(punit, F_CARAVAN)) return 0; + if (!unit_flag(punit, F_TRADE_ROUTE)) return 0; pdestcity = map_get_city(punit->x, punit->y); if (!pdestcity) return 0; phomecity = find_city_by_id(punit->homecity); diff -ruN -X ../patch/diff_ignore 20011215-1800/common/unittype.c caravan/common/unittype.c --- 20011215-1800/common/unittype.c Sat Dec 15 19:09:34 2001 +++ caravan/common/unittype.c Sat Dec 15 21:44:52 2001 @@ -40,7 +40,7 @@ "Land", "Sea", "Heli", "Air" }; static const char *flag_names[] = { - "Caravan", "Missile", "IgZOC", "NonMil", "IgTer", "Carrier", + "TradeRoute" ,"HelpWonder", "Missile", "IgZOC", "NonMil", "IgTer", "Carrier", "OneAttack", "Pikemen", "Horse", "IgWall", "FieldUnit", "AEGIS", "Fighter", "Marines", "Partial_Invis", "Settlers", "Diplomat", "Trireme", "Nuclear", "Spy", "Transform", "Paratroopers", diff -ruN -X ../patch/diff_ignore 20011215-1800/common/unittype.h caravan/common/unittype.h --- 20011215-1800/common/unittype.h Sat Dec 15 19:09:34 2001 +++ caravan/common/unittype.h Sat Dec 15 19:32:41 2001 @@ -77,7 +77,8 @@ (It is easier to go from i to (1<owner != punit->owner && !pplayers_allied(city_owner(pcity), unit_owner(punit)) @@ -1108,7 +1108,7 @@ struct city *pcity_dest; punit = player_find_unit_by_id(pplayer, req->unit_id); - if (!punit || !unit_flag(punit, F_CARAVAN)) + if (!punit || !unit_flag(punit, F_HELP_WONDER)) return; pcity_dest = find_city_by_id(req->city_id); @@ -1152,7 +1152,7 @@ int revenue; punit = player_find_unit_by_id(pplayer, req->unit_id); - if (!punit || !unit_flag(punit, F_CARAVAN)) + if (!punit || !unit_flag(punit, F_TRADE_ROUTE)) return 0; pcity_homecity=player_find_city_by_id(pplayer, punit->homecity);