DELTA 12525 773 993
SVN  Ž\Ólµ …Q €k […v€l O €s E‡ €‚\ O €h E‡ €‚J O ™ E‡ €‚` O €a E‡ €‚& K €_ E‡ €Z K €f E‡ €L K €[ E‡ €| K €f E‡ €‚ K ¦ E‡ €„ O ¼ E‡ €ƒh K ¦ E‡ €ƒO O ª E‡ €‚+ K š E‡ €	 K €z E‡ €< K ž E‡ €c K ¤ E‡ €P O ¢ E‡ €Z O ¬ E‡ © K ¯ E‡ €ƒ K ¨ E‡ €gfc_config.h>
#endif

/* common */
#include "extras.h"
#include "game.h"
#include "tile.h"
#include "unit.h"has_flag(const struct base_type *pbase, enum base_flag_id flag)
{
  return BV_ISSET(pbase->flags, flag);
}

 Returns TRUE iff any cardinally adjacent tile contains a base with
  the given flag (does not check ptile itself)
*******/
bool is_base_flag_card_near(const struct tile *ptile, enum base_flag_id flag)
{
  cardinal_adjc_iterate(ptile, adjc_tile) {
    base_type_iterate(pbase) {
      if (base_has_flag(pbase, flag) && tile_has_base(adjc_tile, pbase)) {
        return TRUE;
      }
    } base_type_iterate_end;
  } cardinal_adjc_iterate_end;

  return FALSE;
}

 Returns TRUE iff any adjacent tile contains a base with the given flag
  (does not check ptile itself)
*******/
bool is_base_flag_near_tile(const struct tile *ptile, enum base_flag_id flag)
{
  adjc_iterate(ptile, adjc_tile) {
    base_type_iterate(pbase) {
      if (base_has_flag(pbase, flag) && tile_has_base(adjc_tile, pbase)) {
        return TRUE;
      }
    } base_type_iterate_end;
  } adjc_iterate_end;

  return FALSE;
}

 Is tile native to base?
*******/
bool is_native_tile_to_base(const struct base_type *pbase,
                            const struct tile *ptile)
{
  struct extra_type *pextra;

  pextra = base_extra_get(pbase);

  return are_reqs_active(NULL, NULL, NULL, NULL, ptile,
                         NULL, NULL, NULL, NULL,
                         &pextra->reqs, RPT_POSSIBLE);
}

 Base provides base flag for unit? Checks if base provides flag and if
  base is native to unit.
*******/
bool base_has_flag_for_utype(const struct base_type *pbase,
                             enum base_flag_id flag,
                             const struct unit_type *punittype)
{
  return base_has_flag(pbase, flag)
    && is_native_extra_to_utype(base_extra_get(pbase), punittype);
}


  Return the (translated) name of the base type.
  You don't have to free the return pointer.
*****/
const char *base_name_translation(const struct base_type *pbase)
{
  struct extra_type *pextra = base_extra_get(pbase);

  if (pextra == NULL) {
    return NULL;
  }

  return extra_name_translation(pextra);
}


  Return the (untranslated) rule name of the base type.
  You don't have to free the return pointer.
*****/
const char *base_rule_name(const struct base_type *pbase)
{
  struct extra_type *pextra = base_extra_get(pbase);

  if (pextra == NULL) {
    return NULL;
  }

  return extra_rule_name(pextra);
}


  Returns base type matching rule name or NULL if there is no base type
  with such name.
*****/
struct base_type *base_type_by_rule_name(const char *name)
{
  struct extra_type *pextra = extra_type_by_rule_name(name);

  if (pextra == NULL || !is_extra_caused_by(pextra, EC_BASE)) {
    return NULL;
  }

  return extra_base_get(pextra);
}


  Returns base type matching the translated name, or NULL if there is no
  base type with that name.
*****/
struct base_type *base_type_by_translated_name(const char *name)
{
  struct extra_type *pextra = extra_type_by_translated_name(name);

  if (pextra == NULL || !is_extra_caused_by(pextra, EC_BASE)) {
    return NULL;
  }

  return extra_base_get(pextra);
}


  Can unit build base to given tile?
*****/
bool base_can_be_built(const struct base_type *pbase,
                       const struct tile *ptile)
{
  if (tile_terrain(ptile)->base_time == 0) {
    /* Bases cannot be built on this terrain. */
    return FALSE;
  }

  if (!(base_extra_get(pbase)->buildable)) {
    /* Base type not buildable. */
    return FALSE;
  }

  if (tile_has_base(ptile, pbase)) {
    /* Exist already */
    return FALSE;
  }

  if (tile_city(ptile) != NULL && pbase->border_sq >= 0) {
    return FALSE;
  }

  return TRUE;
}

 Tells if player can build base to tile with suitable unit.
*******/
bool player_can_build_base(const struct base_type *pbase,
                           const struct player *pplayer,
                           const struct tile *ptile)
{
  struct extra_type *pextra;

  if (!base_can_be_built(pbase, ptile)) {
    return FALSE;
  }

  pextra = base_extra_get(pbase);

  return are_reqs_active(pplayer, tile_owner(ptile), NULL, NULL, ptile,
                         NULL, NULL, NULL, NULL,
                         &pextra->reqs, RPT_POSSIBLE);
}


  Can unit build base to given tile?
*****/
bool can_build_base(const struct unit *punit, const struct base_type *pbase,
                    const struct tile *ptile)
{
  struct extra_type *pextra;

  if (!base_can_be_built(pbase, ptile)) {
    return FALSE;
  }

  pextra = base_extra_get(pbase);

  return are_reqs_active(unit_owner(punit), tile_owner(ptile), NULL, NULL,
                         ptile, punit, unit_type(punit), NULL, NULL,
                         &pextra->reqs, RPT_CERTAIN);
}

 Returns base_type entry for an ID value.
*******/
struct base_type *base_by_number(const Base_type_id id)
{
  struct extra_type_list *bases;

  bases = extra_type_list_by_cause(EC_BASE);

  if (bases == NULL || id < 0 || id >= extra_type_list_size(bases)) {
    return NULL;
  }

  return extra_base_get(extra_type_list_get(bases, id));
}


  Return the base index.
*****/
Base_type_id base_number(const struct base_type *pbase)
{
  fc_assert_ret_val(NULL != pbase, -1);
  return pbase->item_number;
}


  Return the base index.

  Currently same as base_number(), paired with base_count()
  indicates use as an array index.
*****/
Base_type_id base_index(const struct base_type *pbase)
{
  fc_assert_ret_val(NULL != pbase, -1);

  /* FIXME: */
  /*  return pbase - base_types; */
  return base_number(pbase);
}


  Return extra that base is.
*****/
struct extra_type *base_extra_get(const struct base_type *pbase)
{
  return pbase->self;
}


  Return the number of base_types.
*****/
Base_type_id base_count(void)
{
  return game.control.num_base_types;
}

 Initialize base_type structures.
*******/
void base_type_init(struct extra_type *pextra, int idx)
{
  struct base_type *pbase;

  pbase = fc_malloc(sizeof(*pbase));

  pextra->data.base = pbase;

  pbase->item_number = idx;
  pbase->self = pextra;
}

 Free the memory associated with base types
*******/
void base_types_free(void)
{
}


  Get best gui_type base for given parameters
*****/
struct base_type *get_base_by_gui_type(enum base_gui_type type,
                                       const struct unit *punit,
                                       const struct tile *ptile)
{
  base_type_iterate(pbase) {
    if (type == pbase->gui_type
        && (!punit || can_build_base(punit, pbase, ptile))) {
      return pbase;
    }
  } base_type_iterate_end;

  return NULL;
}


  Does this base type claim territory?
*****/
bool territory_claiming_base(const struct base_type *pbase)
{
  return pbase->border_sq >= 0;
}
ENDREP
DELTA 26903 25483 60
SVN  Ì5Ìl
3 º ³ ’7¹~struct player *extra_owner(const struct tile *ptileENDREP
DELTA 27188 0 633
SVN  †  †    †   †  †  †   „¦ ” Xƒø; ø~„§extra_owner(ptile);
ŒÀ kl k nENDREP
DELTA 26652 0 12473
SVN  †  †  ‚ 0 ”D €B @˜.€, P‚â ‚¹gš<€, Lƒ÷@€‚s P…Œ m‚Ô€X Lƒ÷@€‚ „'‚Û*€^ Lƒ÷@€‚ a„û| ²_‚ßQ 4ƒ’.€q ‰sƒ”€P ƒž 4ƒ’.€6 T…Œ~ „eƒ­ ® Q…Œ~€H ƒ³@€
 ‚]ƒµ€; Š=ƒ¸k˜ ˜!ƒÃ.€C ƒ³@€, Q…Œ~ •uƒÛJ“ üƒò´ …Š€‚ „õ
– O„ö4€, -„û0 ƒm…O¤ …’p… B— €6 U…ô|€h Cƒ÷@€…7bool maybe_become_veteran_real(struct unit *punit, bool settler);
static void wipe_unit_full(struct unit *punit, bool transported,
                           enum unit_loss_reason reason,
                           struct player *killer);Returns the list of the units owned by 'aplayer' seen by 'pplayer'. The
  returned pointer is newly allocated and should be freed by the caller,
  using unit_list_destroy()**/
struct unit_list *get_seen_units(const struct player *pplayer,
                                 const struct player *aplayer)
{
  struct unit_list *seen_units = unit_list_new();

  unit_list_iterate(aplayer->units, punit) {
    if (can_player_see_unit(pplayer, punit)) {
      unit_list_append(seen_units, punit);
    }
  } unit_list_iterate_end;

  return seen_unitsPass the list of seen units returned by get_seen_units() before
  alliance was broken up**/
void remove_allied_visibility(struct player *pplayer, struct player *aplayer,
                              const struct unit_list *seen_units)
{
  unit_list_iterate(seen_units, punit) {
    /* We need to hide units previously seen by the client. */
    if (**
  Refresh units visibility of 'aplayer' for 'pplayer' after alliance have
  been contracted**/
void give_allied_visibility(struct player *pplayer,
                            struct player *aplayer)
{
  unit_list_iterate(aplayer->units, punit) {
    if (can_player_see_unit(pplayer, punit)) {
      send_unit_info(pplayer->connections, punit);
    }
  } unit**/
static void server_remove_unit_full(struct unit *punit, bool transported,
                                   _at(aplayer, punit, unit_tile(punit),
                               transported**/
static void server_remove_unit(struct unit *punit,
                               enum unit_loss_reason reason)
{
  server_remove_unit_full(punit, unit_transported(punit), reason_full(pcargo, TRUE, ULR_TRANSPORT_LOST, killer**
  Remove the unit, and passengers if it is a carrying any. Remove the**/
static void wipe_unit_full(struct unit *punit, bool transported,
                           enum unit_loss_reason reason,
              struct unit *ptrans = unit_transport_get(punit);

  /* Remove unit itself from its transport */
  if (ptrans != NULL) {
    unit_transport_unload(punit);
    send_unit_info(NULL, ptrans_full(punit, transportedRemove the unit, and passengers if it is a carrying any. Remove the**/
void wipe_unit(struct unit *punit, enum unit_loss_reason reason,
               struct player *killer)
{
  wipe_unit_full(punit, unit_transported(punit), reason, killersend_unit_info(NULL**
  send the unit to the players who need the info.**/
void send_unit_info(struct conn_list *dest, struct unit *punit)
{
  const struct player *powner;
  struct packet_unit_info info;
  struct packet_unit_short_info sinfo;

  if (dest == NULL) {
    dest = game.est_connections;
  }

  CHECK_UNIT(punit);

  powner = unit_owner(punit);conn_get_player(pconn)pplayer == powner || (pplayer == NULL && pconn->observer)) {
      send_packet_unit_info(pconn, &info);
    } else if (pplayer != NULL && can_player_see_unit(pplayer, punit        send_unit_info(dest, punit);ttack/
static bool is_suitable_autoattack_unit(struct unit *punit)
{
  if (unit_has_type_flag(punit, UTYF_NUCLEAR)) {
    /* Not a good idea to nuke our own area */
    return FALSE;
  }

  Check if unit survives enemy autoattacks. We assume that any
  unit that is adjacent to us can see us/
static bool unit_survive_autoattack(struct unit *punit)
{
  struct unit_list *autoattack;
  int moves = punit->moves_left;
  int sanity1 = punit->id;

  if (!game.server.autoattack) {
    return TRUE;
  }

  autoattack = unit_list_new();

  /* Kludge to prevent attack power from dropping to zero during calc */
  punit->moves_left = MAX(punit->moves_left, 1);

  adjc_iterate(unit_tile(punit), ptile) {
    /* First add all eligible units to a unit list */
    unit_list_iterate(ptile->units, penemy) {
      struct player *enemyplayer = unit_owner(penemy);
      enum diplstate_type ds = 
            player_diplstate_get(unit_owner(punit), enemyplayer)->type;

      if (penemy->moves_left †  ‚£G‚¿!0Ï0 Ñx‰4€‡6 GÔ ¥ GÔ €ŠO lêd€z ëL€‚Z ñyŒ R°@ …"Ûy€k ‚ál€  ‚häc [çl€ƒ séx ,ìM° ƒ-ó,€§% …Lû€ƒ~ [€Y‘ „L‹z€R P°@ Ò)¦€ Z‚u iá; …Zû€ œi‚uƒ „e‚žb‚ GÔ €x GÔ €‚@struct unit_move_data {
  struct unit *punit;
  int unit_id;
  const struct player *powner;
  bv_player can_see_unit_at_src;
  bv_player can_see_unit_at_dest;
  struct vision *old_vision;
};

#define SPECLIST_TAG unit_move_data
#include "speclist.h"
#define unit_move_data_list_iterate(_plist, _pdata)                         \
  TYPED_LIST_ITERATE(struct unit_move_data, _plist, _pdata)
#define unit_move_data_list_iterate_end LIST_ITERATE_END
#define unit_move_data_list_both_iterate(_plist, _plink, _pdata)            \
  TYPED_LIST_BOTH_ITERATE(struct unit_move_data_list_link,                  \
                          struct unit_move_data, _plist, _plink, _pdata)
#define unit_move_data_list_both_iterate_end LIST_BOTH_ITERATE_END
#define unit_move_data_list_iterate_rev(_plist, _pdata)                     \
  TYPED_LIST_ITERATE_REV(struct unit_move_data, _plist, _pdata)
#define unit_move_data_list_iterate_rev_end LIST_ITERATE_REV_END

/*****
  Create a new unit move data.
*****/
static struct unit_move_data *unit_move_data_new(struct unit *punit,
                                                 struct tile *psrctile,
                                                 struct tile *pdesttile)
{
  struct unit_move_data *pdata = fc_malloc(sizeof(*pdata));
  struct player *powner = unit_owner(punit);
  const v_radius_t radius_sq =
        V_RADIUS(get_unit_vision_at(punit, pdesttile, V_MAIN),
                 get_unit_vision_at(punit, pdesttile, V_INVIS));
  struct vision *new_vision;
  bool transported = unit_transported(punit);
  bool success;

  pdata->punit = punit;
  pdata->unit_id = punit->id;
  pdata->powner = powner;
  BV_CLR_ALL(pdata->can_see_unit_at_src);
  BV_CLR_ALL(pdata->can_see_unit_at_dest);
  players_iterate(pplayer) {
    if (pplayer == powner
        || can_player_see_unit_at(pplayer, punit, psrctile, transported)) {
      BV_SET(pdata->can_see_unit_at_src, player_index(pplayer));
    }
    if (pplayer == powner
        || can_player_see_unit_at(pplayer, punit, pdesttile, transported)) {
      BV_SET(pdata->can_see_unit_at_dest, player_index(pplayer));
    }
  } players_iterate_end;
  pdata->old_vision = punit->server.vision;

  /* Remove unit from the source tile. */
  fc_assert(unit_tile(punit) == psrctile);
  success = unit_list_remove(psrctile->units, punit);
  fc_assert(success == TRUE);if (transported) {
    /* Silently free orders since they won't be applicable anymore. */
    free_unit_orders(punit);
  }We first unfog the destination, then send the move,
   * and then fog the old territory. This means that the player
   * gets a chance to see the newly explored territory while the
   * client moves the unit, and both areas are visible during the
   * move */

  /* Enhance vision if unit steps into a fortress */
  new_vision = vision_new(pownerreturn pdatapacket_unit_info src_info, dest_info;
  struct packet_unit_short_info src_sinfo, dest_sinfo;
  struct unit_move_data_list *plist =
      unit_move_data_list_new_full((unit_move_data_list_free_fn_t) free);
  struct unit_move_data *pdatapsrctile = unit_tile(punit);
  adj = base_get_direction_for_step(psrctile, pdesttile, &facing);

  conn_list_do_buffer(game.est_Make info packets at 'psrctile'. */
  if (adj) {
    /* If tiles are adjacent, we will show the move to users able
     * to see it. */
    package_unit(punit, &src_info);
    package_short_unit(punit, &src_sinfo, UNIT_INFO_IDENTITY, 0);
  }

  /* Make new data for 'punit'. */
  pdata = unit_move_data_new(punit, psrctile, pdesttile);
  unit_move_data_list_prepend(plist, pdata);

  /* Set unit orientation */Claim ownership of fortress? */
  bowner = extraMove all contained units. */
  unit_cargo_iterate(punit, pcargo) {
    pdata = unit_move_data_new(pcargo, psrctile, pdesttile);
    unit_move_data_list_append(plist, pdata);
  } unit_cargo_iterate_end;

  /* Get data for 'punit'. */
  pdata = unit_move_data_list_front(plist);

  /* Check timeout settings. */
  if (game.info.timeout != 0 && game.server.timeoutaddenemymove > 0) {
    bool new_information_for_enemy = FALSE;

    phase_players_iterate(penemy) {
      /* Increase the timeout if an enemy unit moves and the
       * timeoutaddenemymove setting is in use. */
      if (penemy->is_connected
          && pplayer != penemy
          && pplayers_at_war(pplayer, penemy)
          && (BV_ISSET(pdata->can_see_unit_at_src, player_index(penemy))
              || BV_ISSET(pdata->can_see_unit_at_dest,
                          player_index(penemy)))) {
        new_information_for_enemy = TRUE;
        break;
      }
    } phase_players_iterate_end;

    if (new_information_for_enemy) {
      increase_timeout_because_unit_moved();
    }
  }

  /* Notifications of the move to the clients. */
  if (adj) {
    /* Special case: 'punit' is moving to adjacent position. Then we show
     * 'punit' move to all users able to see 'psrctile' or 'pdesttile'. */

    /* Make info packets at 'pdesttile'. */
    package_unit(punit, &dest_info);
    package_short_unit(punit, &dest_sinfo, UNIT_INFO_IDENTITY, 0);

    conn_list_iterate(game.est_connections, pconn) {
      struct player *aplayer = conn_get_player(pconn);

      if (aplayer == pplayer || (aplayer == NULL && pconn->observer)) {
        send_packet_unit_info(pconn, &src_info);
        send_packet_unit_info(pconn, &dest_info);
      } else if (aplayer != NULL
                 && (BV_ISSET(pdata->can_see_unit_at_src,
                              player_index(aplayer))
                     || BV_ISSET(pdata->can_see_unit_at_dest,
                                 player_index(aplayer)))) {
        send_packet_unit_short_info(pconn, &src_sinfo, FALSE);
        send_packet_unit_short_info(pconn, &dest_sinfo, FALSE);
      }
    } conn_list_iterate_end;
  }

  /* Other moves. */
  unit_move_data_list_iterate(plist, pmove_data) {
    if (adj && pmove_data == pdata) {
      /* If positions are adjacent, we have already shown 'punit' move.
       * See above. */
      continue;
    }

    /* Make info packets at 'pdesttile'. */
    package_unit(pmove_data->punit, &dest_info);
    package_short_unit(pmove_data->punit, &dest_sinfo,
                       UNIT_INFO_IDENTITY, 0);

    conn_list_iterate(game.est_connections, pconn) {
      struct player *aplayer = conn_get_player(pconn);

      if (aplayer == pmove_data->powner
          || (aplayer == NULL && pconn->observer)) {
        send_packet_unit_info(pconn, &dest_info);
      } else if (aplayer != NULL
                 && (BV_ISSET(pmove_data->can_see_unit_at_dest,
                              player_index(aplayer))
                     || (adj && BV_ISSET(pmove_data->can_see_unit_at_src,
                                         player_index(aplayer))))) {
        send_packet_unit_short_info(pconn, &dest_sinfo, FALSE);
      }
    } conn_list_iterate_end;
  } unit_move_data_list_iterate_end;

  /* Remove units going out of sight. */
  unit_move_data_list_iterate_rev(plist, pmove_data) {
    players_iterate(aplayer) {
      if (aplayer != pmove_data->powner
          && BV_ISSET(pmove_data->can_see_unit_at_src, player_index(aplayer))
          && !BV_ISSET(pmove_data->can_see_unit_at_dest,
                       player_index(aplayer))) {
        unit_goes_out_of_sight(aplayer, pmove_data->punit);
      }
    } players_iterate_end;
  } unit_move_data_list_iterate_rev_end;

  /* Clear old vision. */
  unit_move_data_list_iterate(plist, pmove_data) {
    vision_clear_sight(pmove_data->old_vision);
    vision_free(pmove_data->old_vision);
  } unit_move_data_list_iterate_end;

  /* Move consequences. */
  unit_move_data_list_both_iterate(plist, plink, pmove_data) {
    struct unit *aunit = player_unit_by_number(pmove_data->powner,
                                               pmove_data->unit_id);

    if (aunit == pmove_data->punit && unit_tile(aunit) == pdesttile) {
      (void) unit_move_consequences(aunit, psrctile, pdesttile,
                                    pdata != pmove_data);
    } else {
      unit_move_data_list_erase(plist, plink);
    }
  } unit_move_data_list_both_iterate_end;
  /* Check alive units. */
  unit_move_data_list_both_iterate(plist, plink, pmove_data) {
    struct unit *aunit = player_unit_by_number(pmove_data->powner,
                                               pmove_data->unit_id);

    if (aunit != pmove_data->punit || unit_tile(aunit) != pdesttile) {
      unit_move_data_list_erase(plist, plink);
    }
  } unit_move_data_list_both_iterate_end;
  pdata = unit_move_data_list_front(plist);
  if (pdata == NULL || punit != pdata->punit) {
    unit_lives = FALSE;
    pdata = NULL;
  }

  /* Wakeup units and make contact. */  /* Remove units going out of sight. */
        unit_move_data_list_iterate_rev(plist, pmove_data) {
          players_iterate(aplayer) {
            if (aplayer != pmove_data->powner
                && BV_ISSET(pdata->can_see_unit_at_dest,
                            player_index(aplayer))
                && !can_player_see_unit(aplayer, pmove_data->punit)) {
              unit_goes_out_of_sight(aplayer, punit);
            }
          } players_iterate_end;
        } unit_move_data_list_iterate_rev_endif (unit_lives) {game.est_connections);

  unit_move_data_list_destroy(plist);

  return unit_livesdo_action(pplayer,
                            unitid, tile_city(dst_tile)->id,
                            0, ACTION_TRADE_ROUTEtrade route citydo_action(pplayer,
                            unitid,
                            tile_city(dst_tile)->id,
                            0, ACTION_HELP_WONDERact
/***
  Barbarian units may disband spontaneously if their age is more than
  BARBARIAN_MIN_LIFESPAN, they are not in cities, and they are far from
  any enemy units. It is to remove barbarians that do not engage into any
  activity for a long time.
***/
bool unit_can_be_retired(struct unit *punit)
{
  /* check if there is enemy nearby */
  square_iterate(unit_tile(punit), 3, ptile) {
    if (is_enemy_city_tile(ptile, unit_owner(punit))
        || is_enemy_unit_tile(ptile, unit_owner(punit))) {
      return FALSE;
    }
  }
  square_iterate_end;

  return TRUE;
}
ENDREP
DELTA 27089 0 1999
SVN  †  †  -† ß0 „ R„ó1€ ÂyßK ƒ©† ‚•ƒª-… à5…¿K€…   
action_selection_actor_unit(),
                                  city_tile(pcity)->index,
                                  FALSEactionextra        = p->happy_cost;
  output_type_iterate(o) {
    u->upkeep[o] = p->upkeep[o];
  } output_type_iterate_end;
  u->paratroopers_range = p->paratroopers_range;
  u->paratroopers_mr_req = p->paratroopers_mr_req;
  u->paratroopers_mr_sub = p->paratroopers_mr_sub;
  u->bombard_rate       = p->bombard_rate;
  u->city_size          = p->city_size;
  u->cargo              = p->cargo;
  u->targets            = p->targets;
  u->embarks            = p->embarks;
  u->disembarks         = p->disembarks;

  if (p->veteran_levels == 0) {
    u->veteran = NULL;
  } else {
    u->veteran = veteran_system_new(p->veteran_levels);

    for (i = 0; i < p->vete†  ‚×"‚Ôc ‚Ò…‚ I—@˜ I—@€I
/*
  Play suitable music
*/
void handle_play_music(const char *tag)
{
  play_single_track(tag);
}
ENDREP
DELTA 26052 11855 4802
SVN  «(ªs	  ¡,  ‰G¡aENDREP
DELTA 19113 62429 1542
SVN  šršv …Q ƒ “I…Q… T™fc_extraENDREP
DELTA 25382 67773 6046
SVN  ­q»VŠ% † — ‡Z†  TÖ@ †KŽ1€w É'”{ §,Þ" ¦?‡2 LÏ ¶ Jˆ €‚ Qý ² Jˆ €‚5 QÖ>´ Jˆ €‚% QÖ>› Jˆ €Y#include "string_vector  extras[i].helptext = NULL;
  }
    if (NULL != extras[i].helptext) {
      strvec_destroy(extras[i].helptext);
      extras[i].helptext = NULL;
    }!
  Is the extra caused by some kind of worker action?
/
bool is_extra_caused_by_worker_action(const struct extra_type *pextra)
{
  /* Is any of the worker build action bits set? */
  return (pextra->causes
          & (1 << EC_IRRIGATION
             | 1 << EC_MINE
             | 1 << EC_BASE
             | 1 << EC_ROAD)
  What extra cause activity is considered to be?
/
enum extra_cause activity_to_extra_cause(enum unit_activity act)
{
  switch(act) {
  case ACTIVITY_IRRIGATE:
    return EC_IRRIGATION;
  case ACTIVITY_MINE:
    return EC_MINE;
  case ACTIVITY_BASE:
    return EC_BASE;
  case ACTIVITY_GEN_ROAD:
    return EC_ROAD;
  default:
    break;
  }

  return EC_NON
  What extra rmcause activity is considered to be?
/
enum extra_rmcause activity_to_extra_rmcause(enum unit_activity act)
{
  switch(act) {
  case ACTIVITY_PILLAGE:
    return ERM_PILLAGE;
  case ACTIVITY_POLLUTION:
    return ERM_CLEANPOLLUTION;
  case ACTIVITY_FALLOUT:
    return ERM_CLEANFALLOUT;
  default:
    break;
  }

  return ERM_NON
  Who owns extras on tile
/
struct player *extra_owner(const struct tile *ptile)
{
  return ptile->extras_owner;
}
ENDREP
DELTA 23828 4716 11181
SVN  „É}„ëB‚x¶ Œl  ­'Œ2€@ AÌ@€I ‚pºE€‚ „I½f€‹* CÇ?€‚ OÆ:€! ®DÉc… ®Uø+ lÀ: !¸- ‡.¯+€‚^ ¿9 †¸€‚P žb¾N Päq± ‚æ]° Zëg€	 hñ:€
 Zëgƒ ‡HÝ, Sé<€g ‡îE …/õR¿ D‚à> œ2ûw’ X‚˜0 u‚˜}€@ N‚Ÿ8€4 ZÖ}€„v ‚œA€…B y‚ž>€‚i †W‚ @¦ F‚Š<« w‚¢S€H D‚à>œ ‚ª{ S‚¨<€z (‚¸€O }‚¹m€y –d‚»$€T éx‚Ñu† ±ƒ»mŽ †tƒí€‚= [˜ †Iƒõk€) Pƒ÷: Ÿdƒý … ‘„œh… „„­zž ‚
„·Ž F‚Š< ˆn„´x… Œ„½jplayer_tile_free  *gained will be set if there's exactly one kind of extra added/
bool upgrade_city_extras(struct city *pcity, struct extra_type **gained
              && !tile_has_conflicting_extra(ptile, pextra))) {
        tile_add_extra(pcity->tile, pextra);
        if (gained != NULL) {
          if (upgradet) {
            *gained = NULL;
          } else {
            *gained = pextra;
          }
        }int cities_upgradet = 0;
  struct extra_type *upgradet = NULL;
  bool multiple_types = FALSE;
  int cities_total = city_list_size(pplayer->cities);
  int percent;

  conn_list_do_buffer(pplayer->connections);

  city_list_iterate(pplayer->cities, pcity) {
    struct extra_type *new_upgrade;

    if (upgrade_city_extras(pcity, &new_upgrade)) {
      update_tile_knowledge(pcity->tile);
      cities_upgradet++;
      if (new_upgrade == NULL) {
        /* This single city alone had multiple types */
        multiple_types = TRUE;
      } else if (upgradet == NULL) {
        /* First gained */
        upgradet = new_upgrade;
      } else if (upgradet != new_upgrade) {
        /* Different type from what another city got. */
        multiple_types = TRUE;
      }
    }
  } city_list_iterate_end;

  if (cities_total > 0) {
    percent = cities_upgradet * 100 / cities_total;
  } else {
    percent = 0;
  }

  if (cities_upgradet > 0) {
    if (discovery) {
      if (percent >= 75) {
        notify_player(pplayer, NULL, E_TECH_GAIN, ftc_server,
                      _("New hope sweeps like fire through the country as "
                        "the discovery of new infrastructure building technology "
                        "is announced."));
      }
    } else {
      if (percent >= 75) {
        notify_player(pplayer, NULL, E_TECH_GAIN, ftc_server,
                      _("The people are pleased to hear that your "
                                          "technology."));
      }
    }

    if (multiple_types) {
      notify_player(pplayer, NULL, E_TECH_GAIN, ftc_server,
                    _("Workers spontaneously gather and upgrade all "
                      "possible cities with better infrastructure                    _("Workers spontaneously gather and upgrade all "
                      "possible cities with %s."), extra_name_translation(upgradet));
    }extralayer_iterate(v) {
          if (0 < map_get_seen(pplayer, ptile, v)) {
            unit_list_iterate(ptile->units, punit) {
              if (unit_is_visible_on_layer(punit, v)) {
                send_unit_info(pplayer->connections, punit);
              }
            } unit_list_iterate_end;
          }
        } vision_layer_iterate_end;
      }layer_iterate(v) {
          if (0 < map_get_seen(pplayer, ptile, v)) {
            unit_list_iterate(ptile->units, punit) {
              if (unit_is_visible_on_layer(punit, v)) {
                unit_goes_out_of_sight(pplayer, punit);
              }
            } unit_list_iterate_end;
          }
        } vision_layer_iterate_end
      && plrtile->seen_count[V_INVIS] == -change
          && can_player_see_unit(pplayer, punit  }

  if (0 > change[V_MAIN]
      && plrtile->seen_count[V_MAIN] == -change[V_MAIN]) {
    log_debug("(%d, %d): hiding visible units tounit_list_iterate(ptile->units, punit) {
      if (unit_is_visible_on_layer(punit, V_MAIN)
          && can_player_see_unit(pplayer, punit  }Fog the tile. */pdate_player_tile_last_seen(pplayer, ptile);
    if (game.server.foggedborders) {
      plrtile->owner = tile_owner(ptile);
    }
    plrtile->extras_owner = extra_owner(ptile);
    send_tile_info(pplayer->connections, ptile, FALSE->connections->connections, punit);
      }
    } unit_list_iterate_end;
  }***********
  Freewhole_map_iterate(ptile) {
    player_tile_free(ptile, pplayer);***********
  Remove all knowledge of a player from main map and other players'
  private maps, and send updates to connected clients.
  Frees all vision_sites associated with thatremove_player_from_maps(struct player *pplayer)
{
  /* only after removing borders! */
  conn_list_do_buffer(game.est_connections);
  whole_map_iterate(ptile) {
    /* Clear all players' knowledge about the removed player, and free
     * data structures (including those in removed player's player map). */
    bool reality_changed = FALSE;

    players_iterate(aplayer) {
      struct player_tile *aplrtile;
      bool changed = FALSE;

      if (!aplayer->server.private_map) {
        continue;
      }
      aplrtile = map_get_player_tile(ptile, aplayer);

      /* Free vision sites (cities) for removed and other players */  changed = TRUE;
      }

      /* Remove references to player from others' maps */
      if (aplrtile->owner == pplayer) {
        aplrtile->owner = NULL;
        changed = TRUE;
      }
      if (aplrtile->extras_owner == pplayer) {
        aplrtile->extras_owner = NULL;
        changed = TRUE;
      }

      /* Must ensure references to dying player are gone from clients
       * before player is destroyed */
      if (changed) {
        /* This will use player tile if fogged */
        send_tile_info(pplayer->connections, ptile, FALSE);
      }
    } players_iterate_end;

    /* Clear removed player's knowledge */
    if (pplayer->tile_known.vec) {
      map_clear_known(ptile, pplayer);
    }  reality_changed = TRUE;
    }
    if (extra_owner(ptile) == pplayer) {
      ptile->extras_owner = NULL;
      reality_changed = TRUE;
    }

    if (reality_changed) {
      /* Update anyone who can see the tile (e.g. global observers) */
      send_tile_info(NULL, ptile, FALSE);
    }
  } whole_map_iterate_end;
  conn_list_do_unbuffer(game.est_connectionsFree the memory stored into the player*************/
static void player_tile_freeif (plrtile->site != NULL) {
    vision_site_destroy(plrtile->site);
  }*************
  Returns citybool plrtile_owner_valid = game.server.foggedborders
                             && !map_is_known_and_seen(ptile, pplayer, V_MAIN);
  struct player *owner = plrtile_owner_valid
                         ? plrtile->owner
                         : tilowner != tile_owner(ptile)
      || plrtile->extras_owner != extra_owner(ptile)if (plrtile_owner_valid) {
      plrtile->owner = tile_owner(ptile);
    }
    plrtile->extras_owner = extra_owner(ptile)owner    = from_tile->owner;
      dest_tile->extras_owner = from_tile->extras_owner, NULL!= HB_DISABLEDextra_owner(ptile);

  /* This MUST be before potentially recursive call to map_claim_base(),
   * so that the recursive call will get new owner == base_loser and
   * abort recursion. */
  ptile->extras_owner = powner;

  base_type_iterate(pbase) {
    map_claim_base(ptile, pbase, powner, base_loser);
  } base_typeif (owner == NULL) {
    /* Clear the border instead of claiming. Code below this block
     * cannot handle NULL owner. */
    map_clear_border(ptile);

    return;
  }extraextraextra_owner(ptile), NULL);
  }Create road toextraENDREP
DELTA 27144 0 1923
SVN  †  †  
 º4 … €5º8… „åºqextraextra†  ÉÉ
‚ É beENDREP
DELTA 26979 0 1879
SVN  †  †  < ƒ´$ ¼ ‚ë ƒ´Wextra_owner(ptile) == NULL
         || pplayers_at_war(extra†  ƒ¹ƒ¹	‰ ƒ¹ es_halfbyENDREP
DELTA 26870 0 4462
SVN  †  †  ?‰ ‚‰ › þB‚‰8‰ V…­= ©&„ˆPŸ X„›-€† ˆ$„±r€B V…­= —s„ºl€z ÃR„ÒXuoted
  data will be larger  int i;
/* Global advances. */
  string "game.global_advances");
  if (string != NULL) {
    sg_failure_ret(strlen(string) == loading->technology.size,
                   "Invalid length of 'game.global_advances' (%lu ~= %lu).",
                   (unsigned long) strlen(string),
                   (unsigned long) loading->technology.size);
    for (i = 0; i < loading->technology.size; i++) {
      sg_failure_ret(string[i] == '1' || string[i] == '0',
                     "Undefined value '%c' within 'game.global_advances'.",
                     string[i]);
      if (string[i] == '1') {
        struct advance *padvance =
            advance_by_rule_name(loading->technology.order[i]);

        if (padvance != NULL) {
          game.info.global_advances[advance_number(padvance)] = TRUE;
        }
      }
    }
  }  char global_advances[game.control.num_tech_types + 1];
  int i;
/* Global advances. */
  for (i = 0; i < game.control.num_tech_types; i++) {
    global_advances[i] = game.info.global_advances[i] ? '1' : '0';
  }
  global_advances[i] = '\0';
  secfile_insert_str(saving->file, global_advances, "game.global_advances†  †  †  ŠL€‰V š ’ f®p¨ „¬N›0¼ Ín„È1*/
  sg_check_ret();

  if (game.info.is_new_game) {
    /* No owner/source information for a new game / scenario. */
    return;
  }

  /* Owner and ownership source are stored as plain numbers */
  for (y = 0; y < map.ysize; y++) {
    const char *buffer1 = secfile_lookup_str(loading->file,
                                             "map.owner%04d", y);
    const char *buffer2 = secfile_lookup_str(loading->file,
                                             "map.source%04d", y);
    const char *buffer3 = secfile_lookup_str(loading->file,
                                             "map.eowner%04d", y);
    const char *ptr1 = buffer1;
    const char *ptr2 = buffer2;
    const char *ptr3 = buffer3;

    sg_failure_ret(buffer1 != NULL, "%s", secfile_error());
    sg_failure_ret(buffer2 != NULL, "%s", secfile_error());
    if (loading->version >= 30) {
      sg_failure_ret(buffer3 != NULL, "%s", secfile_error());
    }

    for (x = 0; x < map.xsize; x++) {
      char token1[TOKEN_SIZE];
      char token2[TOKEN_SIZE];
      char token3[TOKEN_SIZE];
      int number;
      struct tile *ptile = native_pos_to_tile(x, y);

      scanin(&ptr1, ",", token1, sizeof(token1));
      sg_failure_ret(token1[0] != '\0',
           extra_owner(ptile)
                    player_number(extraextra_owner(ptile) == NULL
         || pplayers_at_war(extraŒÀ ‚Â	‚Ëj‰a€‰a ‚Â	 

    secfile_insert_int(saving->file, punit->changed_from,
                       "%s.changed_from", buf);
    secfile_insert_int(saving->file, punit->changed_from_count,
                       "%s.changed_from_count", buf);
    if (punit->changed_from_target == NULL) {
      secfile_insert_int(saving->file, -1, "%s.changed_from_tgt", buf);
    } else {
      secfile_insert_int(saving->file, extra_index(punit->changed_from_target),
                         "%s.changed_from_tgt", buf);
    }

    secfile_insert_bool(saving->file, punit->done_moving,
                        "%s.done_moving", buf);
    secfile_insert_int(saving->file, punit->moves_left, "%s.moves", buf);
    secfile_insert_int(saving->file, punit->fuel, "%s.fuel", buf);
    secfile_insert_int(saving->file, punit->server.birth_turn,
                      "%s.born", buf);
    secfile_insert_int(saving->file, punit->battlegroup,
                       "%s.battlegroup", buf);

    if (punit->goto_tile) {
      index_to_native_pos(&nat_x, &nat_y, tile_index(punit->goto_tile));
      secfile_insert_bool(saving->file, TRUE, "%s.go", buf);
      secfile_insert_int(saving->file, nat_x, "%s.goto_x", buf);
      secfile_insert_int(saving->file, nat_y, "%s.goto_y", buf);
    }ENDREP
id: 3jx.5ck.r27223/36156
type: file
pred: 3jx.5ck.r26052/76300
count: 65
text: 27223 23085 20 5491 9e9824b800812df0d11e3564f0c4638b
props: 12670 90984 34 0 25e6c2f7558b7484000d4d090dea5b92
cpath: /trunk/common/base.h
copyroot: 15280 /trunk

id: 4f0.5ck.r27223/36397
type: file
pred: 4f0.5ck.r26905/212318
count: 12
text: 27223 23135 35 3446 74c92967e6c02cbaacc5afbbc43d750a
props: 26905 212271 34 0 25e6c2f7558b7484000d4d090dea5b92
cpath: /trunk/common/borders.c
copyroot: 15280 /trunk

id: o9u.5ck.r27223/36643
type: file
pred: o9u.5ck.r26905/205572
count: 56
text: 27223 23200 1417 23965 bee333cabe902d9030880c9a84cec494
props: 26905 205525 34 0 25e6c2f7558b7484000d4d090dea5b92
cpath: /trunk/common/extras.c
copyroot: 15280 /trunk

id: o9w.5ck.r27223/36891
type: file
pred: o9w.5ck.r26905/205862
count: 55
text: 27223 7071 72 9836 e92e283e53bf2674642cad042830436a
props: 26905 205815 34 0 25e6c2f7558b7484000d4d090dea5b92
cpath: /trunk/common/extras.h
copyroot: 15280 /trunk

id: 3jw.5ck.r27223/37135
type: file
pred: 3jw.5ck.r26052/76057
count: 64
text: 27223 0 7044 10647 713b94a74b1ec9a33e37fb249521ab03
props: 12670 90710 34 0 25e6c2f7558b7484000d4d090dea5b92
cpath: /trunk/common/base.c
copyroot: 15280 /trunk

PLAIN
K 11
Makefile.am
V 24
file 5h.5ck.r25801/35234
K 14
achievements.c
V 26
file qhc.5ck.r26905/214675
K 14
achievements.h
V 26
file qhe.5ck.r26905/215849
K 9
actions.c
V 25
file r7a.5ck.r27181/92819
K 9
actions.h
V 25
file r7c.5ck.r27181/93067
K 4
ai.c
V 26
file 4go.5ck.r26905/200613
K 4
ai.h
V 24
file 4gp.5ck.r27002/6597
K 6
aicore
V 23
dir 18t.5ck.r27185/5856
K 6
base.c
V 25
file 3jw.5ck.r27223/37135
K 6
base.h
V 25
file 3jx.5ck.r27223/36156
K 9
borders.c
V 25
file 4f0.5ck.r27223/36397
K 9
borders.h
V 26
file 4f1.5ck.r26905/213493
K 10
calendar.c
V 27
file 147p.5ck.r26905/214086
K 10
calendar.h
V 27
file 147r.5ck.r26905/215265
K 8
capstr.c
V 22
file dv.5ck.r24976/289
K 8
capstr.h
V 24
file dw.5ck.r18858/97074
K 10
citizens.c
V 26
file 6mx.5ck.r26905/203234
K 10
citizens.h
V 26
file 6my.5ck.r26905/204108
K 6
city.c
V 21
file q.5ck.r26947/614
K 6
city.h
V 23
file 3q.5ck.r26874/2910
K 13
clientutils.c
V 26
file zj9.5ck.r26905/212022
K 13
clientutils.h
V 26
file zjb.5ck.r26905/213199
K 8
combat.c
V 22
file wp.5ck.r27137/126
K 8
combat.h
V 24
file wq.5ck.r24573/25814
K 12
connection.c
V 22
file un.5ck.r26351/538
K 12
connection.h
V 22
file uo.5ck.r26351/778
K 9
culture.c
V 27
file 104t.5ck.r26905/202652
K 9
culture.h
V 27
file 104v.5ck.r26905/203523
K 8
dataio.c
V 24
file 15r.5ck.r27027/2551
K 8
dataio.h
V 24
file 15s.5ck.r26834/4081
K 11
diptreaty.c
V 22
file 3r.5ck.r24570/203
K 11
diptreaty.h
V 24
file 3s.5ck.r22430/33000
K 10
disaster.c
V 26
file b2m.5ck.r26905/214973
K 10
disaster.h
V 26
file b2o.5ck.r26905/216145
K 9
effects.c
V 25
file 2eo.5ck.r26392/11084
K 9
effects.h
V 24
file 2ep.5ck.r26713/1078
K 8
events.c
V 25
file 33h.5ck.r26563/44746
K 8
events.h
V 24
file 3t.5ck.r26563/44988
K 8
extras.c
V 25
file o9u.5ck.r27223/36643
K 8
extras.h
V 25
file o9w.5ck.r27223/36891
K 12
fc_cmdhelp.c
V 26
file 76j.5ck.r26905/216438
K 12
fc_cmdhelp.h
V 26
file 76k.5ck.r26905/216731
K 14
fc_interface.c
V 26
file 4up.5ck.r26905/201770
K 14
fc_interface.h
V 26
file 4uq.5ck.r26905/202358
K 10
fc_types.h
V 22
file 2ll.5ck.r27120/50
K 15
featured_text.c
V 26
file 4h3.5ck.r26905/212899
K 15
featured_text.h
V 26
file 4h4.5ck.r26905/213786
K 6
game.c
V 23
file 3u.5ck.r26904/3759
K 6
game.h
V 24
file 3v.5ck.r27042/12006
K 19
generate_packets.py
V 24
file 2f4.5ck.r26917/1738
K 12
government.c
V 25
file he.5ck.r25382/101248
K 12
government.h
V 24
file hf.5ck.r25151/83855
K 6
idex.c
V 24
file qo.5ck.r25151/84101
K 6
idex.h
V 24
file qp.5ck.r18858/92434
K 13
improvement.c
V 22
file vb.5ck.r27036/203
K 13
improvement.h
V 23
file vc.5ck.r26605/3666
K 5
map.c
V 23
file r.5ck.r26428/31431
K 5
map.h
V 22
file 41.5ck.r26950/277
K 8
mapimg.c
V 26
file 6n9.5ck.r26905/214381
K 8
mapimg.h
V 26
file 6na.5ck.r26905/215559
K 15
metaknowledge.c
V 26
file siq.5ck.r26905/206154
K 15
metaknowledge.h
V 26
file sis.5ck.r26905/206455
K 10
movement.c
V 25
file 2xv.5ck.r26369/89463
K 10
movement.h
V 25
file 2xw.5ck.r26369/89711
K 13
multipliers.c
V 27
file 197b.5ck.r26905/218478
K 13
multipliers.h
V 27
file 197d.5ck.r26905/219360
K 18
name_translation.h
V 26
file 4k1.5ck.r26905/217596
K 8
nation.c
V 24
file il.5ck.r26881/35006
K 8
nation.h
V 22
file im.5ck.r27000/284
K 9
packets.c
V 24
file 43.5ck.r23778/20942
K 11
packets.def
V 25
file 2f5.5ck.r27181/92570
K 9
packets.h
V 24
file 44.5ck.r26349/10254
K 8
player.c
V 22
file 45.5ck.r27147/309
K 8
player.h
V 24
file 46.5ck.r26824/28997
K 14
requirements.c
V 24
file 2wq.5ck.r26954/4125
K 14
requirements.h
V 24
file 2wr.5ck.r26954/4373
K 10
research.c
V 24
file 4ro.5ck.r27017/5070
K 10
research.h
V 24
file 4rp.5ck.r27015/5557
K 10
rgbcolor.c
V 26
file 6i6.5ck.r26905/218776
K 10
rgbcolor.h
V 26
file 6i7.5ck.r26905/219068
K 6
road.c
V 26
file 6pq.5ck.r26905/202943
K 6
road.h
V 26
file 6pr.5ck.r26905/203816
K 10
scriptcore
V 24
dir 75a.5ck.r27081/11982
K 11
spaceship.c
V 23
file 98.5ck.r26349/9773
K 11
spaceship.h
V 24
file 99.5ck.r26349/10015
K 12
specialist.c
V 23
file 33f.5ck.r22372/258
K 12
specialist.h
V 25
file 33g.5ck.r23560/15220
K 7
style.c
V 26
file zzb.5ck.r26905/204398
K 7
style.h
V 26
file zzd.5ck.r26905/204988
K 6
team.c
V 23
file 33i.5ck.r25891/212
K 6
team.h
V 23
file 33j.5ck.r26183/314
K 6
tech.c
V 22
file t.5ck.r27149/7328
K 6
tech.h
V 24
file u.5ck.r26401/193881
K 9
terrain.c
V 24
file 2fp.5ck.r27149/7564
K 9
terrain.h
V 24
file qs.5ck.r26572/10955
K 6
tile.c
V 23
file 2ys.5ck.r27071/738
K 6
tile.h
V 25
file 2yt.5ck.r26109/28279
K 13
traderoutes.c
V 25
file bf8.5ck.r27128/42804
K 13
traderoutes.h
V 25
file bfa.5ck.r27128/43054
K 8
traits.h
V 26
file 7k3.5ck.r26905/202065
K 6
unit.c
V 22
file v.5ck.r26955/1796
K 6
unit.h
V 23
file 48.5ck.r26955/2272
K 10
unitlist.c
V 25
file 39m.5ck.r26369/88735
K 10
unitlist.h
V 25
file 39n.5ck.r25929/28243
K 10
unittype.c
V 23
file v9.5ck.r27149/7084
K 10
unittype.h
V 23
file va.5ck.r26955/2512
K 9
version.c
V 23
file oe.5ck.r26171/7093
K 9
version.h
V 23
file e7.5ck.r26171/7331
K 9
victory.c
V 26
file qex.5ck.r26905/217020
K 9
victory.h
V 26
file qez.5ck.r26905/217896
K 8
vision.c
V 26
file 4dm.5ck.r19259/404222
K 8
vision.h
V 24
file 4dn.5ck.r24742/9986
K 12
workertask.c
V 26
file llw.5ck.r26905/206753
K 12
workertask.h
V 26
file lly.5ck.r26905/212604
K 10
worklist.c
V 25
file o8.5ck.r19259/402799
K 10
worklist.h
V 24
file o9.5ck.r18858/98299
END
ENDREP
id: p.5ck.r27223/42683
type: dir
pred: p.5ck.r27185/11404
count: 4098
text: 27223 37375 5295 5295 a6bf07ccfb61667b966d52d2f10a55b0
props: 23743 0 112 0 b2bc91bf125d83375389d51f25ff2c2f
cpath: /trunk/common
copyroot: 15280 /trunk

id: 13.5ck.r27223/42913
type: file
pred: 13.5ck.r27158/206
count: 368
text: 27223 24647 7324 79298 767e951964b096114feab2581b2e6b5b
props: 10990 3093 112 0 0e7b2145f04ad4ce4f4fdbad497f598c
cpath: /trunk/server/maphand.c
copyroot: 15280 /trunk

id: 4u.5ck.r27223/43157
type: file
pred: 4u.5ck.r27144/1952
count: 653
text: 27223 32001 58 111754 6f5b299e54ed1a8cad07cde91d8a2834
props: 11057 14272 112 0 ab87823e529bcaae2ff952f918d53839
cpath: /trunk/server/plrhand.c
copyroot: 15280 /trunk

id: 4m0.5ck.r27223/43402
type: file
pred: 4m0.5ck.r27039/3748
count: 252
text: 27223 32223 3907 247274 49913147174b63c7dcc54ba7f4e24965
props: 26905 58059 34 0 25e6c2f7558b7484000d4d090dea5b92
cpath: /trunk/server/savegame2.c
copyroot: 15280 /trunk

id: vl.5ck.r27223/43652
type: file
pred: vl.5ck.r26979/1908
count: 665
text: 27223 32085 112 158862 a69706cd36a285f847fe06f87076dfd8
props: 11092 74 112 0 de3988801a325e2d7d51fcbc7209a255
cpath: /trunk/server/savegame.c
copyroot: 15280 /trunk

id: 1a.5ck.r27223/43896
type: file
pred: 1a.5ck.r27181/38009
count: 752
text: 27223 7278 14771 143265 f6f6e48482a121b17fc2d17962864a02
props: 11095 1637 112 0 c5bfe3670c093a84ebf28b66298044e4
cpath: /trunk/server/unittools.c
copyroot: 15280 /trunk

PLAIN
K 11
Makefile.am
V 23
file 5q.5ck.r27204/3331
K 8
advisors
V 23
dir 4n2.5ck.r27182/2245
K 9
aiiface.c
V 25
file 4gm.5ck.r26905/55786
K 9
aiiface.h
V 25
file 4gn.5ck.r26905/56374
K 9
animals.c
V 25
file vnk.5ck.r26905/62972
K 9
animals.h
V 25
file vnm.5ck.r26905/63257
K 6
auth.c
V 25
file 39c.5ck.r20274/32101
K 6
auth.h
V 25
file 39d.5ck.r18977/19170
K 11
barbarian.c
V 22
file lw.5ck.r26434/594
K 11
barbarian.h
V 24
file lx.5ck.r22667/36940
K 14
citizenshand.c
V 25
file 6mz.5ck.r26905/56079
K 14
citizenshand.h
V 25
file 6n0.5ck.r26905/56662
K 10
cityhand.c
V 24
file 10.5ck.r19573/66885
K 10
cityhand.h
V 23
file 4f.0.r13297/423686
K 11
citytools.c
V 24
file 4g.5ck.r27128/37134
K 11
citytools.h
V 24
file 4h.5ck.r26863/25714
K 10
cityturn.c
V 24
file 4i.5ck.r26881/47053
K 10
cityturn.h
V 24
file 4j.5ck.r24742/16670
K 11
civserver.c
V 23
file 4k.5ck.r27134/1477
K 10
commands.c
V 23
file 2ly.5ck.r26966/278
K 10
commands.h
V 24
file 2lz.5ck.r24675/8215
K 13
connecthand.c
V 24
file 2dw.5ck.r26263/1131
K 13
connecthand.h
V 24
file 2dx.5ck.r23606/2057
K 9
console.c
V 24
file dd.5ck.r24895/15492
K 9
console.h
V 23
file de.5ck.r19183/7918
K 10
diplhand.c
V 23
file 4m.5ck.r27058/1648
K 10
diplhand.h
V 21
file 4n.0.r13421/6826
K 11
diplomats.c
V 24
file vz.5ck.r27181/37760
K 11
diplomats.h
V 24
file w0.5ck.r26563/19858
K 10
edithand.c
V 24
file 3bk.5ck.r26877/2056
K 10
edithand.h
V 25
file 4ez.5ck.r26905/64705
K 6
fcdb.c
V 25
file 6l3.5ck.r26905/56956
K 6
fcdb.h
V 25
file 6l4.5ck.r26905/57239
K 10
gamehand.c
V 23
file 4o.5ck.r27042/1951
K 10
gamehand.h
V 24
file 4p.5ck.r26564/23149
K 9
generator
V 23
dir 2me.5ck.r27071/7433
K 10
handchat.c
V 23
file 4q.5ck.r25915/6654
K 10
handchat.h
V 24
file dj.5ck.r18270/28229
K 9
maphand.c
V 24
file 13.5ck.r27223/42913
K 9
maphand.h
V 23
file 14.5ck.r24759/3742
K 6
meta.c
V 23
file 4s.5ck.r27134/1241
K 6
meta.h
V 23
file 4t.5ck.r27204/3095
K 6
mood.c
V 26
file 112c.5ck.r26905/63547
K 6
mood.h
V 26
file 112e.5ck.r26905/64129
K 8
notify.c
V 25
file 4i2.5ck.r26905/57814
K 8
notify.h
V 25
file 4i3.5ck.r26905/58681
K 9
plrhand.c
V 24
file 4u.5ck.r27223/43157
K 9
plrhand.h
V 23
file 4v.5ck.r26956/6294
K 8
report.c
V 24
file vi.5ck.r26564/22659
K 8
report.h
V 24
file vj.5ck.r24891/20006
K 10
rssanity.c
V 25
file hew.5ck.r26905/55205
K 10
rssanity.h
V 25
file hey.5ck.r26905/55500
K 9
ruleset.c
V 24
file 8w.5ck.r26970/10515
K 9
ruleset.h
V 24
file 8x.5ck.r26403/78772
K 13
sanitycheck.c
V 23
file wi.5ck.r26109/6020
K 13
sanitycheck.h
V 24
file wj.5ck.r20315/26296
K 12
savecompat.c
V 25
file qva.5ck.r26905/63834
K 12
savecompat.h
V 25
file qvc.5ck.r26905/64415
K 10
savegame.c
V 24
file vl.5ck.r27223/43652
K 10
savegame.h
V 24
file vm.5ck.r20758/19233
K 11
savegame2.c
V 25
file 4m0.5ck.r27223/43402
K 11
savegame2.h
V 25
file 4m1.5ck.r26905/58971
K 7
score.c
V 25
file 2eg.5ck.r25535/51502
K 7
score.h
V 24
file 2eh.5ck.r21929/6179
K 9
scripting
V 23
dir 31x.5ck.r27127/6477
K 8
sernet.c
V 23
file 15.5ck.r27134/1001
K 8
sernet.h
V 23
file 4y.5ck.r23685/5129
K 10
settings.c
V 24
file 2m0.5ck.r27042/2675
K 10
settings.h
V 24
file 2m1.5ck.r23685/4644
K 11
spacerace.c
V 24
file 9a.5ck.r25063/30975
K 11
spacerace.h
V 21
file 9b.0.r11338/1129
K 9
srv_log.c
V 25
file 15t.5el.r26118/12291
K 9
srv_log.h
V 25
file 15u.5em.r25274/15557
K 10
srv_main.c
V 22
file vg.5ck.r27134/524
K 10
srv_main.h
V 22
file vh.5ck.r27134/762
K 11
stdinhand.c
V 22
file 4z.5ck.r26831/395
K 11
stdinhand.h
V 24
file 50.5ck.r26100/15471
K 11
techtools.c
V 24
file 33n.5ck.r27058/1887
K 11
techtools.h
V 24
file 33o.5ck.r27058/2134
K 10
unithand.c
V 22
file 18.5ck.r27184/719
K 10
unithand.h
V 24
file 19.5ck.r23027/66151
K 11
unittools.c
V 24
file 1a.5ck.r27223/43896
K 11
unittools.h
V 23
file 1b.5ck.r26956/5564
K 8
voting.c
V 25
file 4ex.5ck.r26905/57525
K 8
voting.h
V 25
file 4ey.5ck.r26905/58399
END
ENDREP
id: z.5ck.r27223/48000
type: dir
pred: z.5ck.r27204/7423
count: 5769
text: 27223 44145 3842 3842 a4c51e140a5326215a103d77976d2ee0
props: 23990 448 166 0 e5026e1cb18fe57b41417951bfac7b19
cpath: /trunk/server
copyroot: 15280 /trunk

id: n.5ck.r27223/48231
type: file
pred: n.5ck.r27181/58884
count: 1020
text: 27223 22076 983 145931 8b6b6a4bd4f6c8f09330dc26bba1d768
props: 11088 14698 112 0 2c9d3e41a2f20488aa9cdb8d740d094e
cpath: /trunk/client/packhand.c
copyroot: 15280 /trunk

id: hl.5ck.r27223/48478
type: file
pred: hl.5ck.r27188/659
count: 587
text: 27223 7171 82 208620 3f0c4b6a922d78e87912ab3a46614153
props: 11096 3792 112 0 71c6b453a620995957914f193a952f13
cpath: /trunk/client/tilespec.c
copyroot: 15280 /trunk

PLAIN
K 11
Makefile.am
V 24
file 5f.5ck.r26633/81862
K 6
agents
V 22
dir zf.5ck.r26587/1113
K 11
attribute.c
V 24
file xh.5ck.r25151/59391
K 11
attribute.h
V 24
file xi.5ck.r18863/23649
K 7
audio.c
V 25
file 139.5ck.r27127/10791
K 7
audio.h
V 25
file 13a.5ck.r27127/11031
K 12
audio_none.c
V 25
file 13d.5ck.r24916/15731
K 12
audio_none.h
V 25
file 13e.5ck.r18863/20841
K 11
audio_sdl.c
V 25
file 13f.5ck.r27123/78063
K 11
audio_sdl.h
V 25
file 13g.5ck.r18863/23885
K 17
chatline_common.c
V 25
file 14q.5ck.r24895/20143
K 17
chatline_common.h
V 24
file 14r.5ck.r24892/5917
K 16
citydlg_common.c
V 24
file z4.5ck.r26149/21321
K 16
citydlg_common.h
V 24
file z5.5ck.r26149/21571
K 13
cityrepdata.c
V 25
file mb.5ck.r24790/282697
K 13
cityrepdata.h
V 24
file mc.5ck.r18863/19121
K 13
client_main.c
V 23
file 2f.5cp.r27204/8114
K 13
client_main.h
V 23
file hz.5cq.r26714/9499
K 8
climap.c
V 24
file 197.5ck.r20232/3008
K 8
climap.h
V 25
file 198.5ck.r18863/24126
K 9
climisc.c
V 23
file d5.5ck.r26796/4227
K 9
climisc.h
V 23
file i0.5ck.r26654/5011
K 8
clinet.c
V 24
file hc.5ck.r26633/57244
K 8
clinet.h
V 24
file i1.5ck.r18863/24866
K 15
colors_common.c
V 24
file 33a.5ck.r22855/3020
K 15
colors_common.h
V 24
file 33b.5ck.r24136/6711
K 19
connectdlg_common.c
V 24
file 2fw.5ck.r26714/9764
K 19
connectdlg_common.h
V 25
file 2fx.5ck.r19154/53802
K 9
control.c
V 24
file gz.5ck.r27181/62348
K 9
control.h
V 24
file i2.5ck.r27181/67376
K 7
dummy.c
V 26
file 4f9.5ck.r26905/141682
K 12
dummycxx.cpp
V 26
file 6kr.5ck.r26905/106211
K 8
editor.c
V 24
file 3bg.5ck.r26198/2350
K 8
editor.h
V 24
file 3bh.5ck.r26198/2592
K 17
global_worklist.c
V 26
file 4i6.5ck.r26905/117850
K 17
global_worklist.h
V 26
file 4i7.5ck.r26905/126022
K 6
goto.c
V 23
file vu.5ck.r26558/2997
K 6
goto.h
V 24
file vv.5ck.r23027/81018
K 11
gui-gtk-2.0
V 23
dir zs.5ck.r27208/17635
K 11
gui-gtk-3.0
V 22
dir zs.5g7.r27214/5782
K 6
gui-qt
V 24
dir 6ie.5ck.r27208/27230
K 7
gui-sdl
V 24
dir 16t.5ck.r27212/13887
K 8
gui-sdl2
V 24
dir 16t.5l8.r27212/20417
K 8
gui-stub
V 23
dir mh.5ck.r27193/29994
K 7
gui-xaw
V 23
dir 9o.5ck.r27193/24124
K 14
gui_cbsetter.c
V 25
file a3c.5ck.r27193/30237
K 14
gui_cbsetter.h
V 25
file a3d.5ck.r26905/69091
K 15
gui_interface.c
V 25
file 6jm.5ir.r27193/26472
K 15
gui_interface.h
V 25
file 6jn.5is.r27193/26744
K 10
helpdata.c
V 24
file h1.5ck.r26922/10682
K 10
helpdata.h
V 24
file i3.5ck.r25494/33011
K 7
include
V 23
dir b8.5ck.r27193/26231
K 19
luaconsole_common.c
V 26
file 75z.5ck.r26905/100821
K 19
luaconsole_common.h
V 26
file 760.5ck.r26905/106500
K 9
luascript
V 25
dir 761.5ck.r26905/116963
K 16
mapctrl_common.c
V 25
file 15m.5ck.r26324/21423
K 16
mapctrl_common.h
V 25
file 15n.5ck.r19893/12504
K 16
mapview_common.c
V 22
file z2.5ck.r26343/797
K 16
mapview_common.h
V 23
file z3.5ck.r24711/3555
K 19
messagewin_common.c
V 26
file 14s.5ck.r24790/282945
K 19
messagewin_common.h
V 25
file 14t.5ck.r18863/21579
K 7
music.c
V 25
file zmc.5ck.r27127/11271
K 7
music.h
V 25
file zme.5ck.r27127/11513
K 9
options.c
V 24
file dc.5ck.r27208/17882
K 9
options.h
V 24
file i4.5ck.r27208/18127
K 17
overview_common.c
V 26
file 2yk.5ck.r24790/283201
K 17
overview_common.h
V 26
file 2yl.5ck.r24790/283707
K 10
packhand.c
V 23
file n.5ck.r27223/48231
K 10
packhand.h
V 24
file i5.5ck.r18863/20596
K 15
plrdlg_common.c
V 23
file 14u.5ck.r23426/823
K 15
plrdlg_common.h
V 25
file 14v.5ck.r18863/21328
K 17
repodlgs_common.c
V 25
file 11i.5ck.r22325/76263
K 17
repodlgs_common.h
V 25
file 11j.5ck.r19589/11861
K 9
reqtree.c
V 25
file 2ym.5ck.r25398/35740
K 9
reqtree.h
V 24
file 2yn.5ck.r24150/6004
K 9
servers.c
V 25
file 33x.5ck.r25113/10928
K 9
servers.h
V 25
file 33y.5ck.r20478/36372
K 6
text.c
V 25
file 2g3.5ck.r26564/39676
K 6
text.h
V 25
file 2g4.5ck.r24459/13284
K 15
themes_common.c
V 22
file 352.5ck.r26465/95
K 15
themes_common.h
V 25
file 353.5ck.r18863/22710
K 10
tilespec.c
V 24
file hl.5ck.r27223/48478
K 10
tilespec.h
V 24
file i6.5ck.r27090/13425
K 19
unitselect_common.c
V 26
file 76v.5ck.r26905/117249
K 19
unitselect_common.h
V 26
file 76w.5ck.r26905/117548
K 14
update_queue.c
V 26
file 4jw.5ck.r26905/141084
K 14
update_queue.h
V 26
file 4jx.5ck.r26905/141966
K 10
voteinfo.c
V 26
file 4fe.5ck.r26905/141386
K 10
voteinfo.h
V 26
file 4ff.5ck.r26905/142263
END
ENDREP
id: d.5ck.r27223/53008
type: dir
pred: d.5ck.r27214/10331
count: 6436
text: 27223 48721 4274 4274 0943c3ed79bcd79b5d395c6e43d3277b
props: 23990 857 387 0 afe872b7fe8919650a535e373916e1f7
cpath: /trunk/client
copyroot: 15280 /trunk

PLAIN
K 9
ABOUT-NLS
V 24
file fu.5ck.r23462/85000
K 7
AUTHORS
V 24
file 5u.5ck.r22143/14016
K 7
COPYING
V 19
file 1h.0.r9643/400
K 9
ChangeLog
V 26
file 6l.5ck.r22811/6091752
K 7
INSTALL
V 22
file 6.5ck.r26104/4084
K 11
Makefile.am
V 22
file 59.5ck.r27213/499
K 4
NEWS
V 24
file 6m.5ck.r25634/30702
K 6
README
V 20
file 7.0.r4421/96382
K 2
ai
V 21
dir 8.5ck.r27202/4337
K 10
autogen.sh
V 24
file 12o.5ck.r25794/4003
K 9
bootstrap
V 23
dir 2p5.5ck.r27114/4172
K 6
client
V 22
dir d.5ck.r27223/53008
K 6
common
V 22
dir p.5ck.r27223/42683
K 12
configure.ac
V 24
file 149.5ck.r27215/9818
K 4
data
V 23
dir w.5ck.r27220/286466
K 12
dependencies
V 24
dir 2yu.5ck.r27008/44168
K 3
doc
V 22
dir k7.5ck.r27191/2525
K 10
fc_version
V 26
file 2lo.5en.r27181/102183
K 11
gen_headers
V 24
dir 1hsw.5ck.r27204/2943
K 2
m4
V 23
dir 12p.5ck.r26993/2487
K 7
scripts
V 23
dir 2yo.5ck.r27213/1366
K 6
server
V 22
dir z.5ck.r27223/48000
K 5
tests
V 22
dir 2g9.5ck.r27023/734
K 5
tools
V 23
dir 4pj.5js.r27217/4627
K 12
translations
V 25
dir t0a.5ck.r27186/355470
K 7
utility
V 22
dir 1c.5ck.r27150/3475
K 3
vms
V 25
dir u9.5ck.r21528/1396085
K 5
win32
V 23
dir 2eu.5ck.r27219/1880
END
ENDREP
id: 3.5ck.r27223/54413
type: dir
pred: 3.5ck.r27220/287872
count: 18715
text: 27223 53240 1160 1160 56a37bda9c9306f6da25f1a583ff74f1
props: 23244 4830 282 0 e4bb46e81629a60eef613b169b23a9ea
cpath: /trunk
copyroot: 15280 /trunk

PLAIN
K 8
branches
V 21
dir 1.0.r27222/288146
K 4
tags
V 19
dir 2.0.r27200/6414
K 5
trunk
V 22
dir 3.5ck.r27223/54413
K 7
website
V 21
dir 3ge.0.r22980/2263
END
ENDREP
id: 0.0.r27223/54809
type: dir
pred: 0.0.r27222/288475
count: 27223
text: 27223 54641 155 155 5f0a4077c969a56533605bfb8000eb99
cpath: /
copyroot: 0 /

3jw.5ck.t27222-1 modify true false /trunk/common/base.c

o9w.5ck.t27222-1 modify true false /trunk/common/extras.h

hl.5ck.t27222-1 modify true false /trunk/client/tilespec.c

1a.5ck.t27222-1 modify true false /trunk/server/unittools.c

n.5ck.t27222-1 modify true false /trunk/client/packhand.c

3jx.5ck.t27222-1 modify true false /trunk/common/base.h

4f0.5ck.t27222-1 modify true false /trunk/common/borders.c

o9u.5ck.t27222-1 modify true false /trunk/common/extras.c

13.5ck.t27222-1 modify true false /trunk/server/maphand.c

4u.5ck.t27222-1 modify true false /trunk/server/plrhand.c

vl.5ck.t27222-1 modify true false /trunk/server/savegame.c

4m0.5ck.t27222-1 modify true false /trunk/server/savegame2.c


54809 54960
