DELTA 22819 2026 1351
SVN  Š9Ð\‚1«z …i €‚/ O  †|€„h O  ˆ~€ˆ& K €3 K €n K €z O €r O €‚U K €‚ K €‚ K €ƒZ K €ƒ K €N K €N K €p K €p K €{ K €†# K €‚. K €‚
 K €‚Y K €‚+ O €ƒ! O €ƒ O €ƒD O €…3 O €„; O €„B O €‡h O €„: O €„N O €‰ O €ƒY O €‰b O €†V O €‚/ O €‚6 O €h K €‚] K €ƒC K €ƒ K €ƒ K €ƒ K €‚= K €‚C K €ƒ7 K €ƒ) K €? K €„hutility */
#include "rand.h"
#include "string_vector.h"

/* common */
#include "base.h"
#include "game.h"
#include "road.h"

#include "extras.h"

static struct extra_type extras[MAX_EXTRA_TYPES];

static struct extra_type_list *caused_by[EC_LAST];
static struct extra_type_list *removed_by[ERM_COUNT];

int i;

  for (i = 0; i < EC_LAST; i++) {
    caused_by[i] = extra_type_list_new();
  }
  for (i = 0; i < ERM_COUNT; i++) {
    removed_by[i] = extra_type_list_new();
  }

  for (i = 0; i < MAX_EXTRA_TYPES; i++) {
    requirement_vector_init(&(extras[i].reqs));
    requirement_vector_init(&(extras[i].rmreqs));
    requirement_vector_init(&(extras[i].spontaneous_reqs));
    extras[i].id = i;
    extras[i].hiders = NULL;
    extras[i].data.special_idx = -1;
    extras[i].data.base = NULL;
    extras[i].data.road = NULL;
    extras[i].causes = 0;
    extras[i].rmcauses = 0;
    extras[i].helptext = NULL;
  }
}

int i;

  base_types_free();
  road_types_free();

  for (i = 0; i < game.control.num_extra_types; i++) {
    if (extras[i].data.base != NULL) {
      FC_FREE(extras[i].data.base);
      extras[i].data.base = NULL;
    }
    if (extras[i].data.road != NULL) {
      FC_FREE(extras[i].data.road);
      extras[i].data.road = NULL;
    }
  }

  for (i = 0; i < EC_LAST; i++) {
    extra_type_list_destroy(caused_by[i]);
    caused_by[i] = NULL;
  }

  for (i = 0; i < ERM_COUNT; i++) {
    extra_type_list_destroy(removed_by[i]);
    removed_by[i] = NULL;
  }

  for (i = 0; i < MAX_EXTRA_TYPES; i++) {
    requirement_vector_free(&(extras[i].reqs));
    requirement_vector_free(&(extras[i].rmreqs));
    requirement_vector_free(&(extras[i].spontaneous_reqs));

    if (NULL != extras[i].helptext) {
      strvec_destroy(extras[i].helptext);
      extras[i].helptext = NULL;
    }
  }

  extra_type_iterate(pextra) {
    if (pextra->hiders != NULL) {
      extra_type_list_destroy(pextra->hiders);
      pextra->hiders = NULL;
    }
  } extra_type_iterate_end;
}


  Return the number of extra_types.
**************************************************************************/
int extra_count(void)
{
  return game.control.num_extra_types;
}


  Return the extra id.
**************************************************************************/
int extra_number(const struct extra_type *pextra)
{
  fc_assert_ret_val(NULL != pextra, -1);

  return pextra->id;
}

#ifndef extra_index

  Return the extra index.
**************************************************************************/
int extra_index(const struct extra_type *pextra)
{
  fc_assert_ret_val(NULL != pextra, -1);

  return pextra - extras;
}
#endif /* extra_index */

 Return extras type of given id.
****************************************************************************/
struct extra_type *extra_by_number(int id)
{
  fc_assert_ret_val(id >= 0 && id < MAX_EXTRA_TYPES, NULL);

  return &extras[id];
}

 Get extra of the given special
****************************************************************************/
struct extra_type *special_extra_get(int spe)
{
  struct extra_type_list *elist = extra_type_list_by_cause(EC_SPECIAL);

  if (spe < extra_type_list_size(elist)) {
    return extra_type_list_get(elist, spe);
  }

  return NULL;
}


  Return the (translated) name of the extra type.
  You don't have to free the return pointer.
**************************************************************************/
const char *extra_name_translation(const struct extra_type *pextra)
{
  return name_translation(&pextra->name);
}


  Return the (untranslated) rule name of the extra type.
  You don't have to free the return pointer.
**************************************************************************/
const char *extra_rule_name(const struct extra_type *pextra)
{
  return rule_name(&pextra->name);
}


  Returns extra type matching rule name or NULL if there is no extra type
  with such name.
**************************************************************************/
struct extra_type *extra_type_by_rule_name(const char *name)
{
  const char *qs;

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

  qs = Qn_(name);

  extra_type_iterate(pextra) {
    if (!fc_strcasecmp(extra_rule_name(pextra), qs)) {
      return pextra;
    }
  } extra_type_iterate_end;

  return NULL;
}


  Returns extra type matching the translated name, or NULL if there is no
  extra type with that name.
**************************************************************************/
struct extra_type *extra_type_by_translated_name(const char *name)
{
  extra_type_iterate(pextra) {
    if (0 == strcmp(extra_name_translation(pextra), name)) {
      return pextra;
    }
  } extra_type_iterate_end;

  return NULL;
}


  Returns base type of extra.
**************************************************************************/
struct base_type *extra_base_get(const struct extra_type *pextra)
{
  return pextra->data.base;
}


  Returns road type of extra.
**************************************************************************/
struct road_type *extra_road_get(const struct extra_type *pextra)
{
  return pextra->data.road;
}


  Returns base type of extra. Uses const parameter.
**************************************************************************/
const struct base_type *extra_base_get_const(const struct extra_type *pextra)
{
  return pextra->data.base;
}


  Returns road type of extra. Uses const parameter.
**************************************************************************/
const struct road_type *extra_road_get_const(const struct extra_type *pextra)
{
  return pextra->data.road;
}


  Returns extra type for given cause.
**************************************************************************/
struct extra_type_list *extra_type_list_by_cause(enum extra_cause cause)
{
  fc_assert(cause < EC_LAST);

  return caused_by[cause];
}


  Return random extra type for given cause that is native to the tile.
**************************************************************************/
struct extra_type *rand_extra_for_tile(struct tile *ptile, enum extra_cause cause)
{
  struct extra_type_list *full_list = extra_type_list_by_cause(cause);
  struct extra_type_list *potential = extra_type_list_new();
  int options;
  struct extra_type *selected = NULL;

  extra_type_list_iterate(full_list, pextra) {
    if (is_native_tile_to_extra(pextra, ptile)) {
      extra_type_list_append(potential, pextra);
    }
  } extra_type_list_iterate_end;

  options = extra_type_list_size(potential);

  if (options > 0) {
    selected = extra_type_list_get(potential, fc_rand(options));
  }

  extra_type_list_destroy(potential);

  return selected;
}


  Add extra type to list of extra caused by given cause.
**************************************************************************/
void extra_to_caused_by_list(struct extra_type *pextra, enum extra_cause cause)
{
  fc_assert(cause < EC_LAST);

  extra_type_list_append(caused_by[cause], pextra);
}


  Returns extra type for given rmcause.
**************************************************************************/
struct extra_type_list *extra_type_list_by_rmcause(enum extra_rmcause rmcause)
{
  fc_assert(rmcause < ERM_COUNT);

  return removed_by[rmcause];
}


  Add extra type to list of extra removed by given cause.
**************************************************************************/
void extra_to_removed_by_list(struct extra_type *pextra,
                              enum extra_rmcause rmcause)
{
  fc_assert(rmcause < ERM_COUNT);

  extra_type_list_append(removed_by[rmcause], pextra);
}


  Is given cause one of the removal causes for given extra?
**************************************************************************/
bool is_extra_removed_by(const struct extra_type *pextra,
                         enum extra_rmcause rmcause)
{
  return (pextra->rmcauses & (1 << rmcause));
}

 Is there extra of the given type cardinally near tile?
  (Does not check ptile itself.)
****************************************************************************/
bool is_extra_card_near(const struct tile *ptile, const struct extra_type *pextra)
{
  cardinal_adjc_iterate(ptile, adjc_tile) {
    if (tile_has_extra(adjc_tile, pextra)) {
      return TRUE;
    }
  } cardinal_adjc_iterate_end;

  return FALSE;
}

 Is there extra of the given type near tile?
  (Does not check ptile itself.)
****************************************************************************/
bool is_extra_near_tile(const struct tile *ptile, const struct extra_type *pextra)
{
  adjc_iterate(ptile, adjc_tile) {
    if (tile_has_extra(adjc_tile, pextra)) {
      return TRUE;
    }
  } adjc_iterate_end;

  return FALSE;
}

 Tells if extra can build to tile if all other requirements are met.
****************************************************************************/
bool extra_can_be_built(const struct extra_type *pextra,
                        const struct tile *ptile)
{
  if (!pextra->buildable) {
    /* Extra type not buildable */
    return FALSE;
  }

  if (tile_has_extra(ptile, pextra)) {
    /* Extra exist already */
    return FALSE;
  }

  return TRUE;
}

 Tells if player can build extra to tile with suitable unit.
****************************************************************************/
static bool can_build_extra_base(const struct extra_type *pextra,
                                 const struct player *pplayer,
                                 const struct tile *ptile)
{
  if (is_extra_caused_by(pextra, EC_BASE)
      && !base_can_be_built(extra_base_get_const(pextra), ptile)) {
    return FALSE;
  }

  if (is_extra_caused_by(pextra, EC_ROAD)
      && !can_build_road_base(extra_road_get_const(pextra), pplayer, ptile)) {
    return FALSE;
  }

  if (!extra_can_be_built(pextra, ptile)) {
    return FALSE;
  }

  return TRUE;
}

 Tells if player can build extra to tile with suitable unit.
****************************************************************************/
bool player_can_build_extra(const struct extra_type *pextra,
                            const struct player *pplayer,
                            const struct tile *ptile)
{
  if (!can_build_extra_base(pextra, pplayer, ptile)) {
    return FALSE;
  }

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

 Tells if unit can build extra on tile.
****************************************************************************/
bool can_build_extra(struct extra_type *pextra,
                     const struct unit *punit,
                     const struct tile *ptile)
{
  struct player *pplayer = unit_owner(punit);

  if (!can_build_extra_base(pextra, pplayer, ptile)) {
    return FALSE;
  }

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

 Is it possible at all to remove this extra now
****************************************************************************/
static bool can_extra_be_removed(const struct extra_type *pextra,
                                 const struct tile *ptile)
{
  struct city *pcity = tile_city(ptile);

  /* Cannot remove EF_ALWAYS_ON_CITY_CENTER extras from city center. */
  if (pcity != NULL) {
    if (extra_has_flag(pextra, EF_ALWAYS_ON_CITY_CENTER)) {
      return FALSE;
    }
    if (extra_has_flag(pextra, EF_AUTO_ON_CITY_CENTER)) {
      struct tile *vtile = tile_virtual_new(ptile);

      /* Would extra get rebuilt if removed */ 
      tile_remove_extra(vtile, pextra);
      if (player_can_build_extra(pextra, city_owner(pcity), vtile)) {
        /* No need to worry about conflicting extras - extra would had
         * not been here if conflicting one is. */
        tile_virtual_destroy(vtile);

        return FALSE;
      }

      tile_virtual_destroy(vtile);
    }
  }

  return TRUE;
}

 Tells if player can remove extra from tile with suitable unit.
****************************************************************************/
bool player_can_remove_extra(const struct extra_type *pextra,
                             const struct player *pplayer,
                             const struct tile *ptile)
{
  if (!can_extra_be_removed(pextra, ptile)) {
    return FALSE;
  }

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

 Tells if unit can remove extra from tile.
****************************************************************************/
bool can_remove_extra(struct extra_type *pextra,
                      const struct unit *punit,
                      const struct tile *ptile)
{
  struct player *pplayer;

  if (!can_extra_be_removed(pextra, ptile)) {
    return FALSE;
  } 

  pplayer = unit_owner(punit);

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

 Is tile native to extra?
****************************************************************************/
bool is_native_tile_to_extra(const struct extra_type *pextra,
                             const struct tile *ptile)
{
  struct terrain *pterr = tile_terrain(ptile);

  if (is_extra_caused_by(pextra, EC_IRRIGATION)
      && pterr->irrigation_result != pterr) {
    return FALSE;
  }

  if (is_extra_caused_by(pextra, EC_MINE)
      && pterr->mining_result != pterr) {
    return FALSE;
  }

  if (is_extra_caused_by(pextra, EC_BASE)) {
    if (pterr->base_time == 0) {
      return FALSE;
    }
    if (tile_city(ptile) != NULL && extra_base_get_const(pextra)->border_sq >= 0) {
      return FALSE;
    }
  }

  if (is_extra_caused_by(pextra, EC_ROAD)) {
    struct road_type *proad = extra_road_get(pextra);

    if (road_has_flag(proad, RF_RIVER)) {
      if (!terrain_has_flag(pterr, TER_CAN_HAVE_RIVER)) {
        return FALSE;
      }
    } else if (pterr->road_time == 0) {
      return FALSE;
    }
  }

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

 Returns TRUE iff an extra that conflicts with pextra exists at ptile.
****************************************************************************/
bool extra_conflicting_on_tile(const struct extra_type *pextra,
                               const struct tile *ptile)
{
  extra_type_iterate(old_extra) {
    if (tile_has_extra(ptile, old_extra)
        && !can_extras_coexist(old_extra, pextra)) {
      return TRUE;
    }
  } extra_type_iterate_end;

  return FALSE;
}

 Returns next extra by cause that unit or player can build to tile.
****************************************************************************/
struct extra_type *next_extra_for_tile(const struct tile *ptile, enum extra_cause cause,
                                       const struct player *pplayer,
                                       const struct unit *punit)
{
  if (cause == EC_IRRIGATION) {
    struct terrain *pterrain = tile_terrain(ptile);

    if (pterrain->irrigation_result != pterrain) {
      /* No extra can be created by irrigation the tile */
      return NULL;
    }
  }
  if (cause == EC_MINE) {
    struct terrain *pterrain = tile_terrain(ptile);

    if (pterrain->mining_result != pterrain) {
      /* No extra can be created by mining the tile */
      return NULL;
    }
  }

  extra_type_by_cause_iterate(cause, pextra) {
    if (!tile_has_extra(ptile, pextra)) {
      if (punit != NULL) {
        if (can_build_extra(pextra, punit, ptile)) {
          return pextra;
        }
      } else {
        /* punit is certainly NULL, pplayer can be too */
        if (player_can_build_extra(pextra, pplayer, ptile)) {
          return pextra;
        }
      }
    }
  } extra_type_by_cause_iterate_end;

  return NULL;
}

 Returns prev extra by cause that unit or player can remove from tile.
****************************************************************************/
struct extra_type *prev_extra_in_tile(const struct tile *ptile,
                                      enum extra_rmcause rmcause,
                                      const struct player *pplayer,
                                      const struct unit *punit)
{
  fc_assert(punit != NULL || pplayer != NULL);

  extra_type_by_rmcause_iterate(rmcause, pextra) {
    if (tile_has_extra(ptile, pextra)) {
      if (punit != NULL) {
        if (can_remove_extra(pextra, punit, ptile)) {
          return pextra;
        }
      } else {
        if (player_can_remove_extra(pextra, pplayer, ptile)) {
          return pextra;
        }
      }
    }
  } extra_type_by_rmcause_iterate_end;

  return NULL;
}

 Is extra native to unit class?
****************************************************************************/
bool is_native_extra_to_uclass(const struct extra_type *pextra,
                               const struct unit_class *pclass)
{
  return BV_ISSET(pextra->native_to, uclass_index(pclass));
}

 Is extra native to unit type?
****************************************************************************/
bool is_native_extra_to_utype(const struct extra_type *pextra,
                              const struct unit_type *punittype)
{
  return is_native_extra_to_uclass(pextra, utype_class(punittype));
}

 Check if extra has given flag
****************************************************************************/
bool extra_has_flag(const struct extra_type *pextra, enum extra_flag_id flag)
{
  return BV_ISSET(pextra->flags, flag);
}


  Can two extras coexist in same tile?
**************************************************************************/
bool can_extras_coexist(const struct extra_type *pextra1,
                        const struct extra_type *pextra2)
{
  if (pextra1 == pextra2) {
    return TRUE;
  }

  return !BV_ISSET(pextra1->conflicts, extra_index(pextra2));
}


  Does the extra count toward environment upset?
**************************************************************************/
bool extra_causes_env_upset(struct extra_type *pextra,
                            enum environment_upset_type upset)
{
  switch (upset) {
  case EUT_GLOBAL_WARMING:
    return extra_has_flag(pextra, EF_GLOBAL_WARMING);
  case EUT_NUCLEAR_WINTER:
    return extra_has_flag(pextra, EF_NUCLEAR_WINTER);
  }

  return FALSE;
}


  Is given cause one of the causes for given extra?
**************************************************************************/
bool is_extra_caused_by(const struct extra_type *pextra, enum extra_cause cause)
{
  /* There's some extra cause lists above EC_COUNT that do not have equivalent
   * bit in pextra->causes */
  fc_assert(cause < EC_COUNT);

  return (pextra->causes & (1 << cause));
}


  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));
}


  Is the extra removed by some kind of worker action?
**************************************************************************/
bool is_extra_removed_by_worker_action(const struct extra_type *pextra)
{
  /* Is any of the worker remove action bits set? */
  return (pextra->rmcauses
          & (1 << ERM_CLEANPOLLUTION
             | 1 << ERM_CLEANFALLOUT
             | 1 << ERM_PILLAGE));
}


  Is the extra caused by specific worker action?
**************************************************************************/
bool is_extra_caused_by_action(const struct extra_type *pextra,
                               enum unit_activity act)
{
  return is_extra_caused_by(pextra, activity_to_extra_cause(act));
}


  Is the extra removed by specific worker action?
**************************************************************************/
bool is_extra_removed_by_action(const struct extra_type *pextra,
                                enum unit_activity act)
{
  return is_extra_removed_by(pextra, activity_to_extra_rmcause(act));
}


  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_NONE;
}


  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_NONE;
}


  Who owns extras on tile
**************************************************************************/
struct player *extra_owner(const struct tile *ptile)
{
  return ptile->extras_owner;
}


  Are all the requirements for extra to appear on tile fulfilled. Does not
  check if extra is of appearing type (has EC_SPONTANEOUS cause).
**************************************************************************/
bool can_extra_appear(const struct extra_type *pextra, const struct tile *ptile)
{
  return !tile_has_extra(ptile, pextra)
    && is_native_tile_to_extra(pextra, ptile)
    && !extra_conflicting_on_tile(pextra, ptile)
    && are_reqs_active(NULL, tile_owner(ptile), NULL, NULL, ptile,
                       NULL, NULL, NULL, NULL,
                       &pextra->spontaneous_reqs, RPT_CERTAIN);
}
ENDREP
DELTA 28596 19260 57
SVN  ƒ¥-ƒ¦8 ‚Çy ¸ ÝW‚ÇVUINT8 spontaneous_reqs_count;
  REQUIREMENT spontaneous_ENDREP
DELTA 28596 48508 11873
SVN  „ýe„þ9L ƒñ_ €L ŒƒñW    save_reqs_vector(sfile, &(pextra->spontaneous_reqs), path, "spontaneous_ENDREP
DELTA 27687 15775 10752
SVN  ƒ‹#ƒY)‚| ùo — ‡kùw½ ˆ5‚_€‚$ Œ‚Š ¥E‚–i„ Îv‚¼-"Road", or "Spontaneousspontaneous_reqs        = spontaneous appearance requirementsappearance_chance       = If extra has cause "Spontaneous" and other requirements
;                           for its appearance are fulfilled, this tells how big
;                           chance it has to appear each turn. The chance is 1/1000
;                           times this value.landENDREP
DELTA 27673 1603 1073
SVN  ‚¬E‚®s(ƒ „+ Œ ºS„:— ‡k¿½ ˆ5Æ}€‚$ ŒÏ/ Ð>Ü5.January.14"Road", or "Spontaneousspontaneous_reqs        = spontaneous appearance requirementsappearance_chance       = If extra has cause "Spontaneous" and other requirements
;                           for its appearance are fulfilled, this tells how big
;                           chance it has to appear each turn. The chance is 1/1000
;                           times this value.ENDREP
DELTA 28433 4187 368
SVN  ‚Î7‚Îw= Ù ½ õ/Ùspontaneous_reqs        = spontaneous appearance requirementsENDREP
DELTA 22819 997 1016
SVN  ‡jÔÍt † €Ít/* common */
#include "base.h"
#include "fc_types.h"
#include "road.h"
#include "terrain.h"

/* Used in the network protocol. */
#define SPECENUM_NAME extra_flag_id
/* Tile with this extra is considered native for units in tile. */
#define SPECENUM_VALUE0 EF_NATIVE_TILE
#define SPECENUM_VALUE0NAME "NativeTile"
/* Refuel native units */
#define SPECENUM_VALUE1 EF_REFUEL
#define SPECENUM_VALUE1NAME "Refuel"
#define SPECENUM_VALUE2 EF_TERR_CHANGE_REMOVES
#define SPECENUM_VALUE2NAME "TerrChangeRemoves"
/* Extra will be built in cities automatically */
#define SPECENUM_VALUE3 EF_AUTO_ON_CITY_CENTER
#define SPECENUM_VALUE3NAME "AutoOnCityCenter"
/* Extra is always present in cities */
#define SPECENUM_VALUE4 EF_ALWAYS_ON_CITY_CENTER
#define SPECENUM_VALUE4NAME "AlwaysOnCityCenter"
/* Road style gfx from ocean extra connects to nearby land */
#define SPECENUM_VALUE5 EF_CONNECT_LAND
#define SPECENUM_VALUE5NAME "ConnectLand"
/* Counts towards Global Warming */
#define SPECENUM_VALUE6 EF_GLOBAL_WARMING
#define SPECENUM_VALUE6NAME "GlobalWarming"
/* Counts towards Nuclear Winter */
#define SPECENUM_VALUE7 EF_NUCLEAR_WINTER
#define SPECENUM_VALUE7NAME "NuclearWinter"
#define SPECENUM_COUNT EF_COUNT
#define SPECENUM_BITVECTOR bv_extra_flags
#include "specenum_gen.h"

#define EXTRA_NONE (-1)

struct extra_type
{
  int id;
  struct name_translation name;
  enum extra_category category;
  enum extra_cause causes;
  enum extra_rmcause rmcauses;

  char graphic_str[MAX_LEN_NAME];
  char graphic_alt[MAX_LEN_NAME];
  char activity_gfx[MAX_LEN_NAME];
  char act_gfx_alt[MAX_LEN_NAME];
  char rmact_gfx[MAX_LEN_NAME];
  char rmact_gfx_alt[MAX_LEN_NAME];

  struct requirement_vector reqs;
  struct requirement_vector rmreqs;
  struct requirement_vector spontaneous_reqs;

  /* 'buildable' is unclean. Clean solution would be to rely solely on extra_cause:
   * if the extra cannot be built, it's not in the cause's list.
   * But we currently rely on actually-not-buildable extras to be on the lists,
   * for example for the editor to list non-buildable but editor-placeable
   * extras. */
  bool buildable;
  int build_time;
  int build_time_factor;
  int removal_time;
  int removal_time_factor;

  int defense_bonus;
  int appearance_chance;

  bv_unit_classes native_to;

  bv_extra_flags flags;
  bv_extras conflicts;
  bv_extras hidden_by;

  /* Same information as in hidden_by, but iterating through this list is much
   * faster than through all extra types to check which ones are hiding this one.
   * Only used client side. */
  struct extra_type_list *hiders;

  struct strvec *helptext;

  struct
  {
    int special_idx;
    struct base_type *base;
    struct road_type *road;
  } data;
};

/* get 'struct extra_type_list' and related functions: */
#define SPECLIST_TAG extra_type
#define SPECLIST_TYPE struct extra_type
#include "speclist.h"

#define extra_type_list_iterate(extralist, pextra) \
    TYPED_LIST_ITERATE(struct extra_type, extralist, pextra)
#define extra_type_list_iterate_end LIST_ITERATE_END

#define extra_type_list_iterate_rev(extralist, pextra) \
    TYPED_LIST_ITERATE_REV(struct extra_type, extralist, pextra)
#define extra_type_list_iterate_rev_end LIST_ITERATE_REV_END

void extras_init(void);
void extras_free(void);

int extra_count(void);
int extra_number(const struct extra_type *pextra);
struct extra_type *extra_by_number(int id);

/* For optimization purposes (being able to have it as macro instead of function
 * call) this is now same as extra_number(). extras.c does have sematically correct
 * implementation too. */
#define extra_index(_e_) (_e_)->id

struct extra_type *special_extra_get(int spe);

const char *extra_name_translation(const struct extra_type *pextra);
const char *extra_rule_name(const struct extra_type *pextra);
struct extra_type *extra_type_by_rule_name(const char *name);
struct extra_type *extra_type_by_translated_name(const char *name);

struct base_type *extra_base_get(const struct extra_type *pextra);
struct road_type *extra_road_get(const struct extra_type *pextra);
const struct base_type *extra_base_get_const(const struct extra_type *pextra);
const struct road_type *extra_road_get_const(const struct extra_type *pextra);

void extra_to_caused_by_list(struct extra_type *pextra, enum extra_cause cause);
struct extra_type_list *extra_type_list_by_cause(enum extra_cause cause);
struct extra_type *rand_extra_for_tile(struct tile *ptile, enum extra_cause cause);

bool is_extra_caused_by(const struct extra_type *pextra, enum extra_cause cause);
bool is_extra_caused_by_worker_action(const struct extra_type *pextra);
bool is_extra_caused_by_action(const struct extra_type *pextra,
                               enum unit_activity act);

void extra_to_removed_by_list(struct extra_type *pextra, enum extra_rmcause rmcause);
struct extra_type_list *extra_type_list_by_rmcause(enum extra_rmcause rmcause);

bool is_extra_removed_by(const struct extra_type *pextra, enum extra_rmcause rmcause);
bool is_extra_removed_by_worker_action(const struct extra_type *pextra);
bool is_extra_removed_by_action(const struct extra_type *pextra,
                                enum unit_activity act);

bool is_extra_card_near(const struct tile *ptile, const struct extra_type *pextra);
bool is_extra_near_tile(const struct tile *ptile, const struct extra_type *pextra);

bool extra_can_be_built(const struct extra_type *pextra, const struct tile *ptile);
bool can_build_extra(struct extra_type *pextra,
                     const struct unit *punit,
                     const struct tile *ptile);
bool player_can_build_extra(const struct extra_type *pextra,
                            const struct player *pplayer,
                            const struct tile *ptile);

bool can_remove_extra(struct extra_type *pextra,
                      const struct unit *punit,
                      const struct tile *ptile);
bool player_can_remove_extra(const struct extra_type *pextra,
                             const struct player *pplayer,
                             const struct tile *ptile);

bool is_native_extra_to_uclass(const struct extra_type *pextra,
                               const struct unit_class *pclass);
bool is_native_extra_to_utype(const struct extra_type *pextra,
                              const struct unit_type *punittype);
bool is_native_tile_to_extra(const struct extra_type *pextra,
                             const struct tile *ptile);
bool extra_conflicting_on_tile(const struct extra_type *pextra,
                               const struct tile *ptile);

bool extra_has_flag(const struct extra_type *pextra, enum extra_flag_id flag);

bool extra_causes_env_upset(struct extra_type *pextra,
                            enum environment_upset_type upset);

bool can_extras_coexist(const struct extra_type *pextra1,
                        const struct extra_type *pextra2);

bool can_extra_appear(const struct extra_type *pextra, const struct tile *ptile);

struct extra_type *next_extra_for_tile(const struct tile *ptile, enum extra_cause cause,
                                       const struct player *pplayer,
                                       const struct unit *punit);
struct extra_type *prev_extra_in_tile(const struct tile *ptile, enum extra_rmcause rmcause,
                                      const struct player *pplayer,
                                      const struct unit *punit);

enum extra_cause activity_to_extra_cause(enum unit_activity act);
enum extra_rmcause activity_to_extra_rmcause(enum unit_activity act);

struct player *extra_owner(const struct tile *ptile);

#define extra_type_iterate(_p)                                \
{                                                             \
  int _i_;                                                    \
  for (_i_ = 0; _i_ < game.control.num_extra_types; _i_++) {  \
    struct extra_type *_p = extra_by_number(_i_);

#define extra_type_iterate_end                    \
  }                                               \
}

#define extra_type_by_cause_iterate(_cause, _extra)                 \
{                                                                   \
  struct extra_type_list *_etl_ = extra_type_list_by_cause(_cause); \
  if (_etl_ != NULL) {                                              \
    extra_type_list_iterate(_etl_, _extra) {

#define extra_type_by_cause_iterate_end                    \
    } extra_type_list_iterate_end                          \
  }                                                        \
}

#define extra_type_by_cause_iterate_rev(_cause, _extra)                 \
{                                                                      \
 struct extra_type_list *_etl_ = extra_type_list_by_cause(_cause);     \
  extra_type_list_iterate_rev(_etl_, _extra) {

#define extra_type_by_cause_iterate_rev_end                \
  } extra_type_list_iterate_rev_end                        \
}

#define extra_type_by_rmcause_iterate(_rmcause, _extra)                   \
{                                                                         \
  struct extra_type_list *_etl_ = extra_type_list_by_rmcause(_rmcause);   \
  extra_type_list_iterate_rev(_etl_, _extra) {

#define extra_type_by_rmcause_iterate_end                \
  } extra_type_list_iterate_rev_end                      \
}

#define extra_deps_iterate(_reqs, _dep)                 \
{                                                       \
  requirement_vector_iterate(_reqs, preq) {             \
    if (preq->source.kind == VUT_EXTRA                  \
        && preq->present) {                             \
      struct extra_type *_dep;                          \
      _dep = preq->source.value.extra;

#define extra_deps_iterate_end                          \
    }                                                   \
  } requirement_vector_iterate_end;                     \
}

#ifdef __cplusplus
}
#endif /* __cplusplus */

#endif  /* FC__EXTRAS_H */
ENDREP
DELTA 28433 529 331
SVN  ƒ†]ƒ‡= üg ½ ‰yüdspontaneous_reqs        = spontaneous appearance requirementsENDREP
DELTA 28220 0 208
SVN  ‚½k‚ÀR‚a ©R ½ ˆ5©O€‚$ ‹j²spontaneous_reqs        = spontaneous appearance requirementsappearance_chance       = If extra has cause "Spontaneous" and other requirements
;                           for its appearance are fulfilled, this tells how big
;                           chance it has to appear each turn. The chance is 1/1000
;                           times this value.ENDREP
DELTA 28562 26834 3492
SVN  ƒ½Jƒ¾
= ‚‡S ½ µz‚‡Pspontaneous_reqs        = spontaneous appearance requirementsENDREP
DELTA 28366 0 1719
SVN  †  †    †   †  ‚ß]‚á| ‚w í; €D ö<í+€ e‚„° K¹  ù^åfor (i = 0; i < p->spontaneous_reqs_count; i++) {
    requirement_vector_append(&pextra->spontaneous_reqs, p->spontaneous_reqs[i]);
  }
  fc_assert(pextra->spontaneous_reqs.size == p->spontaneous_request_do_action(ACTION_FOUND_CITY,
                        unit_id, tile_index(unit_tile(punit)),
                        0, namethe requested follow up question about an actionENDREP
DELTA 28086 0 8972
SVN  †  †  !‚7 …òn ³ …ñKŒ ˆJ…òZ€x |†›8  …üreqs = lookup_req_list(file, section, "spontaneous_spontaneous_
        extra_to_caused_by_list(pextra, EC_DEFENSIVE);
      }

      pextra->appearance_chance = secfile_lookup_int_default(file, RS_DEFAULT_EXTRA_APPEARANCE,
                                                             "%s.appearance_chance",
  †  †  †  -‰9€ƒ  lŸ" Ì?0€ƒS ƒ¢UÌj C„Ñ€% g„Ï5€! ¥„ïile, &nval, "%s.flags", section);
      BV_CLR_ALL(pbase->flags);
      for (j = 0; j < nval; j++) {
        const char *sval = slist[j];
        enum base_flag_id flag = base_flag_id_by_name(sval, fc_strcasecmp);

        if (!base_flag_id_is_valid(flag)) {
          ruleset_error(LOG_ERROR, "\"%s\" base \"%s\": unknown flag \"%s\".",
                        filename,
                        base_rule_name(pbase  vec  = secfile_lookup_str_vec(file, &game.server.ruledit.embedded_nations_count,
                                "ruledit.embedded_nations");

  if (vec != NULL) {
    /* Copy to persistent vector */
    game.server.ruledit.embedded_nations
      = fc_malloc(game.server.ruledit.embedded_nations_count * sizeof(char *));

    for (j = 0; j < game.server.ruledit.embedded_nations_count; j++) {
      game.server.ruledit.embedded_nations[j] = fc_strdup(vec[j]);
    }_Found City (100% chance of success). */
          N_("%sFound City%s"),
          "actions.ui_name_found_city");
      sz_strlcpy(action_by_number(ACTION_FOUND_CITY_Join City (100% chance of success). */
          N_("%sJoin City%s"),
          "actions.ui_name_join_city");
      sz_strlcpy(action_by_number(ACTION_JOIN_CITYŒÀ ‚‰_‚–i/‡Zµ m½7° 	Ãy€‚/ “x˜ !•$€` rÕ"€‚! ¹( €- ÐL¹ket_ruleset_specialist(dest, &packet);
  } specialisttechs ruleset information (all individual advanctechs(struct conn_list *dest)
{
  struct packet_ruleset_tech packet;
  struct packet_ruleset_tech_flag fpacket;
  int i;

  for (i = 0; i < MAX_NUM_USER_TECH_FLAGS; i++) {
    const char *flagname;
    const char *helptxt;

    fpacket.id = i + TECH_USER_1;

    flagname = tech_flag_id_name_cb(i + TECHch_flag_helptxt(i + TECHch_flag(dest, &fpacket);
  }

  advance_iterate(A_FIRST, a) {
    packet.id = advance_number(a);    sz_strlcpy(packet.graphic_str, a->graphic_str);
    sz_strlcpy(packet.graphic_alt, a->graphic_alt);

    packet.req[AR_ONE] = a->require[AR_ONE]
                         ? advance_number(a->require[AR_ONE])
                         : advance_count();
    packet.req[AR_TWO] = a->requirj = 0;
    requirement_vector_iterate(&e->spontaneous_reqs, preq) {
      packet.spontaneous_reqs[j++] = *preq;
    } requirement_vector_iterate_end;
    packet.spontaneous_ENDREP
DELTA 28433 2376 331
SVN  ƒ•wƒ–7= þ ½ —rþspontaneous_reqs        = spontaneous appearance requirementsENDREP
DELTA 27673 3562 2617
SVN  ¬!®O#ƒ ? Œ ßtN— ‡káJ½ ˆ5é2€‚$ Œñd ­eþ<5.January.14"Road", or "Spontaneousspontaneous_reqs        = spontaneous appearance requirementsappearance_chance       = If extra has cause "Spontaneous" and other requirements
;                           for its appearance are fulfilled, this tells how big
;                           chance it has to appear each turn. The chance is 1/1000
;                           times this value.ENDREP
DELTA 28035 0 60
SVN  pp
 Œ  † JŒ&Mar.24ENDREP
id: thd.5js.r28603/38107
type: file
pred: thd.5js.r28596/106474
count: 81
text: 28603 22468 103 81721 c9441272ada42d8f10c1fa5df22b8b28
props: 26905 29675 34 0 25e6c2f7558b7484000d4d090dea5b92
cpath: /trunk/tools/ruledit/rulesave.c
copyroot: 21464 /trunk/tools

PLAIN
K 11
Makefile.am
V 25
file sso.5js.r27705/51523
K 17
requirers_dlg.cpp
V 26
file 1942.5js.r27597/10942
K 15
requirers_dlg.h
V 26
file 1944.5js.r26905/32801
K 11
ruledit.cpp
V 25
file ssq.5m2.r28203/24861
K 9
ruledit.h
V 25
file uyp.5js.r26905/33417
K 14
ruledit_qt.cpp
V 25
file uyr.5js.r27597/11469
K 12
ruledit_qt.h
V 25
file uys.5js.r26905/28195
K 10
rulesave.c
V 25
file thd.5js.r28603/38107
K 10
rulesave.h
V 25
file thf.5js.r26905/30946
K 16
tab_building.cpp
V 26
file 1dyi.5js.r27597/12253
K 14
tab_building.h
V 26
file 1dyk.5js.r26905/30331
K 12
tab_misc.cpp
V 25
file vcq.5js.r27597/11995
K 10
tab_misc.h
V 25
file vcs.5js.r26905/30028
K 14
tab_nation.cpp
V 26
file 18bk.5js.r27597/11731
K 12
tab_nation.h
V 26
file 18bm.5js.r26905/29111
K 12
tab_tech.cpp
V 25
file vct.5js.r27597/11208
K 10
tab_tech.h
V 25
file vcu.5js.r26905/27581
K 12
tab_unit.cpp
V 26
file 1ej0.5js.r27597/10680
K 10
tab_unit.h
V 26
file 1ej2.5js.r26905/32496
K 10
validity.c
V 25
file 1402.5js.r28352/8994
K 10
validity.h
V 26
file 1404.5js.r26905/30640
END
ENDREP
id: ssm.5js.r28603/39421
type: dir
pred: ssm.5js.r28596/107791
count: 129
text: 28603 38368 1040 1040 7c9ae2444c520c6b3519109d5f939012
props: 28036 0 261 0 b91e205c4bde11780878927c1dda815f
cpath: /trunk/tools/ruledit
copyroot: 21464 /trunk/tools

PLAIN
K 11
Makefile.am
V 25
file 4pk.5js.r27705/53022
K 11
civmanual.c
V 25
file 2m5.5jt.r28203/24598
K 10
download.c
V 25
file 4pl.5js.r26905/35893
K 10
download.h
V 25
file 4pm.5js.r26905/37103
K 9
modinst.c
V 25
file bj7.5js.r28203/24352
K 9
modinst.h
V 24
file 76i.5js.r27300/3953
K 7
mpcli.c
V 24
file y74.5js.r27418/2176
K 11
mpcmdline.c
V 25
file 73v.5js.r26905/36184
K 11
mpcmdline.h
V 25
file 73w.5js.r26905/37695
K 6
mpdb.c
V 25
file bjc.5js.r26905/38590
K 6
mpdb.h
V 25
file bje.5js.r26905/35017
K 12
mpgui_gtk2.c
V 24
file 4pn.5lm.r27418/2417
K 12
mpgui_gtk3.c
V 24
file 4pn.5ln.r27418/2681
K 12
mpgui_qt.cpp
V 24
file a65.5js.r27670/3327
K 10
mpgui_qt.h
V 23
file a67.5js.r27625/714
K 19
mpgui_qt_worker.cpp
V 23
file vuz.5js.r27625/957
K 17
mpgui_qt_worker.h
V 25
file vv1.5js.r26905/38877
K 7
ruledit
V 24
dir ssm.5js.r28603/39421
END
ENDREP
id: 4pj.5js.r28603/40525
type: dir
pred: 4pj.5js.r28596/108897
count: 268
text: 28603 39668 844 844 8d2188b353d42b6a9a37916eef63b856
props: 28036 1369 325 0 931541cd07e52416301ed56de9c70dfc
cpath: /trunk/tools
copyroot: 21464 /trunk/tools

id: 8w.5ck.r28603/40765
type: file
pred: 8w.5ck.r28596/112627
count: 780
text: 28603 34780 2669 240489 a7d3775d74ba97caebe037a15c3440e7
props: 11085 367 112 0 7f6d12fc80ead5cc285da723cb8caa9d
cpath: /trunk/server/ruleset.c
copyroot: 15280 /trunk

PLAIN
K 11
Makefile.am
V 24
file 5q.5ck.r28427/16272
K 13
actiontools.c
V 27
file 1p83.5ck.r28596/112184
K 13
actiontools.h
V 26
file 1p86.5ck.r28427/15610
K 8
advisors
V 24
dir 4n2.5ck.r28159/10928
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 23
file lw.5ck.r27499/1629
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 22
file 10.5ck.r28601/316
K 10
cityhand.h
V 23
file 4f.0.r13297/423686
K 11
citytools.c
V 24
file 4g.5ck.r28168/37702
K 11
citytools.h
V 24
file 4h.5ck.r28168/37943
K 10
cityturn.c
V 22
file 4i.5ck.r27969/146
K 10
cityturn.h
V 24
file 4j.5ck.r24742/16670
K 11
civserver.c
V 24
file 4k.5ck.r28075/17421
K 10
commands.c
V 26
file 2ly.5ck.r27912/171920
K 10
commands.h
V 25
file 2lz.5ck.r28012/47664
K 13
connecthand.c
V 25
file 2dw.5ck.r27336/16958
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.r28571/8715
K 10
diplhand.h
V 23
file 4n.5ck.r27517/8916
K 11
diplomats.c
V 23
file vz.5ck.r28428/1339
K 11
diplomats.h
V 23
file w0.5ck.r27461/1674
K 10
edithand.c
V 25
file 3bk.5ck.r27611/83395
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 24
dir 2me.5ck.r27705/61438
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 22
file 13.5ck.r28415/610
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 23
file 4u.5ck.r28571/8956
K 9
plrhand.h
V 23
file 4v.5ck.r26956/6294
K 8
report.c
V 25
file vi.5ck.r28596/111694
K 8
report.h
V 24
file vj.5ck.r24891/20006
K 10
rscompat.c
V 27
file 1kte.5ck.r28596/111938
K 10
rscompat.h
V 25
file 1ktg.5ck.r27698/6947
K 10
rssanity.c
V 24
file hew.5ck.r28492/1941
K 10
rssanity.h
V 25
file hey.5ck.r26905/55500
K 9
ruleset.c
V 24
file 8w.5ck.r28603/40765
K 9
ruleset.h
V 23
file 8x.5ck.r28433/8364
K 13
sanitycheck.c
V 22
file wi.5ck.r27281/872
K 13
sanitycheck.h
V 24
file wj.5ck.r28075/17176
K 12
savecompat.c
V 25
file qva.5ck.r27475/19728
K 12
savecompat.h
V 25
file qvc.5ck.r27279/35421
K 10
savegame.c
V 23
file vl.5ck.r27748/2915
K 10
savegame.h
V 24
file vm.5ck.r20758/19233
K 11
savegame2.c
V 24
file 4m0.5ck.r28335/7935
K 11
savegame2.h
V 25
file 4m1.5ck.r27478/65017
K 11
savegame3.c
V 24
file 4m0.5ql.r28335/7429
K 11
savegame3.h
V 25
file 4m1.5qm.r27478/64506
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.r28467/1243
K 8
sernet.c
V 23
file 15.5ck.r28351/8056
K 8
sernet.h
V 23
file 4y.5ck.r23685/5129
K 10
settings.c
V 23
file 2m0.5ck.r28419/318
K 10
settings.h
V 24
file 2m1.5ck.r27995/3767
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 23
file 15t.5el.r27914/980
K 9
srv_log.h
V 25
file 15u.5em.r28012/47157
K 10
srv_main.c
V 23
file vg.5ck.r28590/7991
K 10
srv_main.h
V 22
file vh.5ck.r27134/762
K 11
stdinhand.c
V 23
file 4z.5ck.r27995/4010
K 11
stdinhand.h
V 24
file 50.5ck.r26100/15471
K 11
techtools.c
V 25
file 33n.5ck.r28168/37452
K 11
techtools.h
V 24
file 33o.5ck.r27058/2134
K 10
unithand.c
V 25
file 18.5ck.r28596/112378
K 10
unithand.h
V 24
file 19.5ck.r23027/66151
K 11
unittools.c
V 25
file 1a.5ck.r28596/111445
K 11
unittools.h
V 23
file 1b.5ck.r28377/6232
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.r28603/45165
type: dir
pred: z.5ck.r28601/4711
count: 5932
text: 28603 41012 4140 4140 bc8ea40adc43fd58e81c36e61a02a0ac
props: 23990 448 166 0 e5026e1cb18fe57b41417951bfac7b19
cpath: /trunk/server
copyroot: 15280 /trunk

id: fbi.5ck.r28603/45396
type: file
pred: fbi.5ck.r28433/18503
count: 118
text: 28603 33786 389 41042 4d3bb80ae4023a721df3956ab0a2329e
cpath: /trunk/data/alien/terrain.ruleset
copyroot: 15280 /trunk

PLAIN
K 11
Makefile.am
V 24
file o99.5ck.r25561/8893
K 17
buildings.ruleset
V 26
file fax.5ck.r27687/156203
K 14
cities.ruleset
V 26
file faz.5ck.r27687/156403
K 15
effects.ruleset
V 25
file fb0.5ck.r28352/21534
K 12
game.ruleset
V 26
file fb1.5ck.r28596/124505
K 19
governments.ruleset
V 26
file fb2.5ck.r27687/157389
K 6
nation
V 24
dir fb3.5ck.r27488/10416
K 22
nation_effects.ruleset
V 24
file fbe.5ck.r25501/1912
K 15
nations.ruleset
V 25
file fbf.5ck.r28472/31822
K 10
script.lua
V 24
file fbg.5ck.r28448/3851
K 14
styles.ruleset
V 26
file zzf.5ck.r27687/156795
K 13
techs.ruleset
V 24
file fbh.5ck.r28273/3249
K 15
terrain.ruleset
V 25
file fbi.5ck.r28603/45396
K 13
units.ruleset
V 26
file fbj.5ck.r28596/124307
END
ENDREP
id: fav.5ck.r28603/46327
type: dir
pred: fav.5ck.r28596/125432
count: 308
text: 28603 45596 718 718 c5f7c39922c119ccb3c4ab4619ad6887
props: 23744 7507 47 0 bf36bdb5202732a1b9a911cc1234183c
cpath: /trunk/data/alien
copyroot: 15280 /trunk

id: gd.5ck.r28603/46565
type: file
pred: gd.5ck.r28433/19664
count: 204
text: 28603 23068 442 38771 9b22dccbc13082da7eac01f0614eccf9
props: 10805 55729 111 0 85fb436b243ad384649068d2f55bfd08
cpath: /trunk/data/civ1/terrain.ruleset
copyroot: 15280 /trunk

PLAIN
K 11
Makefile.am
V 24
file 8n.5ck.r24528/29370
K 17
buildings.ruleset
V 25
file 8p.5ck.r27687/159269
K 14
cities.ruleset
V 26
file 3c4.5f0.r27687/159526
K 15
effects.ruleset
V 26
file 2ww.5ck.r27687/159012
K 12
game.ruleset
V 25
file u6.5ck.r28596/125671
K 19
governments.ruleset
V 25
file hg.5ck.r27687/160756
K 15
nations.ruleset
V 23
file os.5ck.r28589/8426
K 10
script.lua
V 25
file 3w7.5ck.r15828/10205
K 14
styles.ruleset
V 26
file zzh.5ck.r27687/160056
K 13
techs.ruleset
V 23
file 8q.5ck.r28535/4513
K 15
terrain.ruleset
V 24
file gd.5ck.r28603/46565
K 13
units.ruleset
V 25
file 8r.5ck.r28596/125925
END
ENDREP
id: 8l.5ck.r28603/47446
type: dir
pred: 8l.5ck.r28596/126803
count: 636
text: 28603 46820 613 613 ba67b663d013ec269b23d537a498f2d1
props: 4431 12663 46 0 e473fc4bd409d833d90929dfcb3a14b8
cpath: /trunk/data/civ1
copyroot: 15280 /trunk

id: gi.5ck.r28603/47681
type: file
pred: gi.5ck.r28433/20777
count: 205
text: 28603 23539 86 42871 1fbc3d26a3f2c8db9efbb16ae04014f6
props: 10805 56804 111 0 7a0697bf766451f41e947e71ce1310bc
cpath: /trunk/data/civ2/terrain.ruleset
copyroot: 15280 /trunk

PLAIN
K 11
Makefile.am
V 24
file gg.5ck.r24528/30633
K 17
buildings.ruleset
V 25
file gm.5ck.r27687/162388
K 14
cities.ruleset
V 26
file 3c4.5ck.r27687/162644
K 15
effects.ruleset
V 25
file 2wx.5ck.r28352/19272
K 12
game.ruleset
V 25
file u7.5ck.r28596/127290
K 19
governments.ruleset
V 25
file hh.5ck.r27687/163850
K 15
nations.ruleset
V 24
file 38l.5ck.r28589/9530
K 10
script.lua
V 25
file 3w8.5ck.r15828/11190
K 14
styles.ruleset
V 26
file zzj.5ck.r27687/163148
K 13
techs.ruleset
V 23
file gn.5ck.r28535/5614
K 15
terrain.ruleset
V 24
file gi.5ck.r28603/47681
K 13
units.ruleset
V 25
file go.5ck.r28596/127038
END
ENDREP
id: ge.5ck.r28603/48561
type: dir
pred: ge.5ck.r28596/128170
count: 699
text: 28603 47935 613 613 ac68690449508b805badff170d653bab
props: 4431 13678 46 0 e473fc4bd409d833d90929dfcb3a14b8
cpath: /trunk/data/civ2
copyroot: 15280 /trunk

id: fuy.5ck.r28603/48796
type: file
pred: fuy.5ck.r28562/41119
count: 133
text: 28603 34200 87 57098 b052b17a7eb4fff7d66b0aec6329146c
props: 21614 269647 34 0 25e6c2f7558b7484000d4d090dea5b92
cpath: /trunk/data/civ2civ3/terrain.ruleset
copyroot: 15280 /trunk

PLAIN
K 11
Makefile.am
V 25
file fuo.5ck.r24528/35815
K 17
buildings.ruleset
V 25
file fuq.5ck.r28562/40344
K 14
cities.ruleset
V 25
file fur.5ck.r28562/40602
K 15
effects.ruleset
V 25
file fus.5ck.r28562/40084
K 12
game.ruleset
V 26
file fut.5ck.r28596/118018
K 19
governments.ruleset
V 25
file fuu.5ck.r28562/41638
K 15
nations.ruleset
V 24
file fuv.5ck.r28589/2347
K 10
script.lua
V 24
file fuw.5ck.r26787/5934
K 14
styles.ruleset
V 26
file zzl.5ck.r27687/140384
K 13
techs.ruleset
V 25
file fux.5ck.r28562/41381
K 15
terrain.ruleset
V 25
file fuy.5ck.r28603/48796
K 13
units.ruleset
V 26
file fuz.5ck.r28596/117758
END
ENDREP
id: fum.5ck.r28603/49686
type: dir
pred: fum.5ck.r28596/118906
count: 367
text: 28603 49056 617 617 248630e7709547f5845559a38003662b
props: 21472 647 47 0 bf36bdb5202732a1b9a911cc1234183c
cpath: /trunk/data/civ2civ3
copyroot: 15280 /trunk

id: 4kg.5ck.r28603/49926
type: file
pred: 4kg.5ck.r28433/14105
count: 147
text: 28603 37475 87 52023 0c156bc6af3d78ce59f3a43d7e852a7f
cpath: /trunk/data/experimental/terrain.ruleset
copyroot: 15280 /trunk

PLAIN
K 11
Makefile.am
V 23
file 4k6.5ck.r28114/744
K 17
buildings.ruleset
V 24
file 4k8.5ck.r28445/3203
K 14
cities.ruleset
V 26
file 4k9.5ck.r27687/143175
K 15
effects.ruleset
V 24
file 4ka.5ck.r28445/3000
K 12
game.ruleset
V 26
file 4kb.5ck.r28596/119350
K 19
governments.ruleset
V 26
file 4kc.5ck.r27687/144194
K 15
nations.ruleset
V 24
file cob.5ck.r28589/3469
K 10
script.lua
V 24
file 4ke.5ck.r26787/8131
K 14
styles.ruleset
V 26
file zzp.5ck.r27687/143581
K 13
techs.ruleset
V 24
file 4kf.5ck.r28535/3444
K 15
terrain.ruleset
V 25
file 4kg.5ck.r28603/49926
K 13
units.ruleset
V 26
file 4kh.5ck.r28596/119146
END
ENDREP
id: 4k5.5ck.r28603/50759
type: dir
pred: 4k5.5ck.r28596/120183
count: 417
text: 28603 50132 614 614 175868aee6c3934a78ae8d2e647d5502
props: 17871 6210 47 0 c348519a2f02d6470452d3eca58ed415
cpath: /trunk/data/experimental
copyroot: 15280 /trunk

id: gl.5es.r28603/51004
type: file
pred: gl.5es.r28433/15184
count: 231
text: 28603 33672 87 50077 b6a688daa98dc2441cce9a21061c3be6
props: 10805 53517 111 0 14533b38c2d22fb145a05b253c8fb2e8
cpath: /trunk/data/multiplayer/terrain.ruleset
copyroot: 17702 /trunk/data/multiplayer

PLAIN
K 11
Makefile.am
V 23
file 8f.5es.r28114/2080
K 17
buildings.ruleset
V 25
file 8t.5es.r27687/146249
K 14
cities.ruleset
V 25
file jx.5es.r27687/146529
K 15
effects.ruleset
V 24
file 2wy.5es.r28114/1807
K 12
game.ruleset
V 25
file u8.5es.r28596/120704
K 19
governments.ruleset
V 25
file hi.5es.r27687/147852
K 15
nations.ruleset
V 24
file cod.5es.r28589/4536
K 10
script.lua
V 24
file 330.5es.r27060/1752
K 14
styles.ruleset
V 26
file zzr.5es.r27687/147078
K 13
techs.ruleset
V 23
file 8u.5es.r28535/6717
K 15
terrain.ruleset
V 24
file gl.5es.r28603/51004
K 13
units.ruleset
V 25
file 8v.5es.r28596/120428
END
ENDREP
id: 89.5es.r28603/51904
type: dir
pred: 89.5es.r28596/121603
count: 1037
text: 28603 51282 609 609 61b73f419809d4a59fc5db0b5f5fd44a
props: 4431 6509 46 0 e473fc4bd409d833d90929dfcb3a14b8
cpath: /trunk/data/multiplayer
copyroot: 17702 /trunk/data/multiplayer

id: 155n.5ck.r28603/52163
type: file
pred: 155n.5ck.r28433/16340
count: 20
text: 28603 37590 437 22351 0d81a267cb1bd183f0a357dc3dc1bddc
cpath: /trunk/data/stub/terrain.ruleset
copyroot: 15280 /trunk

PLAIN
K 17
buildings.ruleset
V 27
file 1558.5ck.r27687/149948
K 14
cities.ruleset
V 27
file 155a.5ck.r27687/150147
K 15
effects.ruleset
V 27
file 155b.5ck.r27687/149750
K 12
game.ruleset
V 23
file 155c.5ck.r27703/90
K 19
governments.ruleset
V 27
file 155d.5ck.r27687/151131
K 7
nations
V 23
dir 155e.5ck.r27717/484
K 15
nations.ruleset
V 25
file 155j.5ck.r28589/5630
K 10
script.lua
V 26
file 155k.5ck.r25199/66100
K 14
styles.ruleset
V 27
file 155l.5ck.r27687/150540
K 13
techs.ruleset
V 27
file 155m.5ck.r27687/150936
K 15
terrain.ruleset
V 26
file 155n.5ck.r28603/52163
K 13
units.ruleset
V 27
file 155o.5ck.r28596/121862
END
ENDREP
id: 1556.5ck.r28603/52999
type: dir
pred: 1556.5ck.r28596/122699
count: 52
text: 28603 52363 623 623 9290c0988758859325055110bb29b100
cpath: /trunk/data/stub
copyroot: 15280 /trunk

id: gl.5jq.r28603/53181
type: file
pred: gl.5jq.r28433/17355
count: 228
text: 28603 22602 435 50905 8acc7b794b609ba749f5c9033c32b4bf
props: 10805 53517 111 0 14533b38c2d22fb145a05b253c8fb2e8
cpath: /trunk/data/classic/terrain.ruleset
copyroot: 21163 /trunk/data/classic/terrain.ruleset

PLAIN
K 11
Makefile.am
V 25
file csz.5ck.r24528/33291
K 17
buildings.ruleset
V 25
file 8t.5ji.r27687/152161
K 14
cities.ruleset
V 25
file jx.5jj.r27687/152451
K 15
effects.ruleset
V 25
file 2wy.5jk.r28352/20386
K 12
game.ruleset
V 25
file u8.5jl.r28596/123162
K 19
governments.ruleset
V 25
file hi.5jm.r27687/153789
K 15
nations.ruleset
V 23
file i7.5jn.r28589/6639
K 10
script.lua
V 24
file 330.5jo.r26787/4815
K 14
styles.ruleset
V 26
file zzn.5ck.r27687/153017
K 13
techs.ruleset
V 23
file 8u.5jp.r28535/7865
K 15
terrain.ruleset
V 24
file gl.5jq.r28603/53181
K 13
units.ruleset
V 25
file 8v.5jr.r28596/122881
END
ENDREP
id: csx.5ck.r28603/54092
type: dir
pred: csx.5ck.r28596/124068
count: 309
text: 28603 53468 611 611 c98e01271a0881bc353c00032aa4b15d
props: 21472 352 47 0 bf36bdb5202732a1b9a911cc1234183c
cpath: /trunk/data/classic
copyroot: 15280 /trunk

PLAIN
K 10
Freeciv.in
V 26
file 2ph.5ck.r28596/117511
K 11
Makefile.am
V 21
file 5l.5ck.r28151/91
K 5
alien
V 24
dir fav.5ck.r28603/46327
K 10
alien.serv
V 23
file fbk.5ck.r22305/900
K 6
amplio
V 25
dir 340.5ck.r28367/166468
K 15
amplio.tilespec
V 25
file 34t.5ck.r28017/15415
K 7
amplio2
V 25
dir 4na.5ck.r28367/170632
K 16
amplio2.tilespec
V 23
file 4oe.5ck.r28450/554
K 9
buildings
V 22
dir 3co.0.r12672/18420
K 10
cimpletoon
V 23
dir 78f.5ck.r27310/6329
K 19
cimpletoon.tilespec
V 24
file 78i.5ck.r28450/1229
K 4
civ1
V 23
dir 8l.5ck.r28603/47446
K 9
civ1.serv
V 23
file 8s.5ck.r20880/5228
K 4
civ2
V 23
dir ge.5ck.r28603/48561
K 9
civ2.serv
V 23
file gj.5ck.r20880/5465
K 8
civ2civ3
V 24
dir fum.5ck.r28603/49686
K 13
civ2civ3.serv
V 23
file fv0.5ck.r24155/112
K 7
classic
V 24
dir csx.5ck.r28603/54092
K 12
classic.serv
V 23
file n1h.5ck.r22608/212
K 12
database.lua
V 24
file 6l2.5ck.r25798/5719
K 7
default
V 22
dir 89.5ck.r28589/8192
K 12
default.serv
V 24
file 2xa.5ck.r27479/5878
K 12
experimental
V 24
dir 4k5.5ck.r28603/50759
K 17
experimental.serv
V 24
file 4ki.5ck.r20880/5702
K 5
flags
V 25
dir 2gl.5ck.r27801/156326
K 19
freeciv-client.icns
V 24
file 3fa.0.r12705/354534
K 18
freeciv-client.png
V 24
file 33s.0.r12705/351588
K 19
freeciv-server.icns
V 24
file 3fc.0.r12705/355017
K 18
freeciv-server.png
V 25
file 3fd.5bk.r13732/27487
K 14
freeciv.rc-2.0
V 25
file 11h.5ck.r16281/11565
K 8
graphics
V 24
dir 2x2.5ck.r28478/54898
K 13
gtk_menus.xml
V 25
file 4hw.5ck.r26137/21048
K 12
helpdata.txt
V 23
file y.5ck.r28530/23009
K 5
hex2t
V 24
dir 3dv.5ck.r25100/56861
K 14
hex2t.tilespec
V 24
file 3e7.5ck.r27869/4823
K 9
hexemplio
V 26
dir 1dwq.5ck.r28566/647851
K 18
hexemplio.tilespec
V 27
file 1dxl.5ck.r28566/648096
K 5
icons
V 24
dir 4cb.5ck.r20125/42857
K 7
isophex
V 24
dir 2pl.5ck.r25100/55852
K 16
isophex.tilespec
V 24
file 2pz.5ck.r27869/5557
K 10
isotrident
V 25
dir 13p.5ck.r28367/168054
K 19
isotrident.tilespec
V 24
file 148.5ck.r27869/6620
K 4
misc
V 23
dir jl.5ck.r28478/51184
K 11
multiplayer
V 23
dir 89.5es.r28603/51904
K 16
multiplayer.serv
V 24
file 2xa.5et.r17702/1849
K 6
nation
V 23
dir ot.5ck.r28312/30452
K 8
override
V 23
dir 14ks.5ck.r25526/900
K 9
scenarios
V 22
dir io.5g6.r28434/1295
K 8
stdmusic
V 23
dir 146c.5ck.r25526/607
K 18
stdmusic.musicspec
V 27
file 10u1.5ck.r25054/880190
K 9
stdsounds
V 23
dir 32g.5ck.r26512/8768
K 19
stdsounds.soundspec
V 22
file 32y.5ck.r28574/46
K 4
stub
V 25
dir 1556.5ck.r28603/52999
K 9
stub.serv
V 26
file 155p.5ck.r25199/65944
K 6
themes
V 23
dir 2m6.5ck.r28036/2880
K 16
toonhex.tilespec
V 27
file 1ef5.5ck.r28566/643832
K 7
trident
V 24
dir eb.5ck.r28368/177567
K 16
trident.tilespec
V 22
file k4.5ck.r28450/795
K 7
wonders
V 23
dir 3qc.5ck.r28518/2262
END
ENDREP
id: w.5ck.r28603/57083
type: dir
pred: w.5ck.r28596/131166
count: 3386
text: 28603 54331 2739 2739 01af8bc7be9f7c35548a82c60a3e8e24
props: 11355 32945 104 0 b8b28eed1bd4d902aad8c746f9403748
cpath: /trunk/data
copyroot: 15280 /trunk

id: n.5ck.r28603/57316
type: file
pred: n.5ck.r28596/69228
count: 1034
text: 28603 34317 437 147708 e2c330ec03424d54c8456a1bf70a0f73
props: 11088 14698 112 0 2c9d3e41a2f20488aa9cdb8d740d094e
cpath: /trunk/client/packhand.c
copyroot: 15280 /trunk

PLAIN
K 11
Makefile.am
V 24
file 5f.5ck.r27705/90803
K 6
agents
V 23
dir zf.5ck.r28218/31616
K 11
attribute.c
V 24
file xh.5ck.r28218/30713
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.r27397/15042
K 16
citydlg_common.h
V 24
file z5.5ck.r27397/15293
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 24
file 2f.5cp.r28203/13318
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 24
file d5.5ck.r28414/62002
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 25
file 2fw.5ck.r27275/53841
K 19
connectdlg_common.h
V 25
file 2fx.5ck.r19154/53802
K 9
control.c
V 24
file gz.5ck.r28596/60409
K 9
control.h
V 24
file i2.5ck.r28512/31210
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.r27873/6912
K 6
goto.h
V 24
file vv.5ck.r27871/19506
K 11
gui-gtk-2.0
V 23
dir zs.5ck.r28596/74361
K 11
gui-gtk-3.0
V 23
dir zs.5g7.r28596/65165
K 6
gui-qt
V 24
dir 6ie.5ck.r28596/68985
K 7
gui-sdl
V 24
dir 16t.5ck.r28596/89260
K 8
gui-sdl2
V 24
dir 16t.5l8.r28596/83653
K 8
gui-stub
V 22
dir mh.5ck.r27870/9461
K 7
gui-xaw
V 23
dir 9o.5ck.r28596/78229
K 14
gui_cbsetter.c
V 26
file a3c.5ck.r27417/165161
K 14
gui_cbsetter.h
V 25
file a3d.5ck.r26905/69091
K 15
gui_interface.c
V 26
file 6jm.5ir.r27417/187983
K 15
gui_interface.h
V 26
file 6jn.5is.r27417/193557
K 10
helpdata.c
V 24
file h1.5ck.r28596/83914
K 10
helpdata.h
V 24
file i3.5ck.r25494/33011
K 7
include
V 24
dir b8.5ck.r27417/187740
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 24
dir 761.5ck.r27705/90564
K 16
mapctrl_common.c
V 23
file 15m.5ck.r27634/293
K 16
mapctrl_common.h
V 24
file 15n.5ck.r27397/5459
K 16
mapview_common.c
V 24
file z2.5ck.r28596/69474
K 16
mapview_common.h
V 23
file z3.5ck.r27397/9503
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 23
file dc.5ck.r28117/8059
K 9
options.h
V 23
file i4.5ck.r28117/2119
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.r28603/57316
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.r28242/13215
K 9
reqtree.h
V 24
file 2yn.5ck.r24150/6004
K 9
servers.c
V 23
file 33x.5ck.r28359/979
K 9
servers.h
V 25
file 33y.5ck.r20478/36372
K 6
text.c
V 24
file 2g3.5ck.r28531/7494
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 22
file hl.5ck.r28461/800
K 10
tilespec.h
V 24
file i6.5ck.r28242/12971
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.r28603/61849
type: dir
pred: d.5ck.r28596/93789
count: 6625
text: 28603 57563 4273 4273 6bbb7f77b3047445755fbb5b4210aaf1
props: 28036 11094 400 0 bbe1d6769a94f3af2a54f7dc91fc9c71
cpath: /trunk/client
copyroot: 15280 /trunk

id: 2f5.5ck.r28603/62083
type: file
pred: 2f5.5ck.r28596/95494
count: 563
text: 28603 22359 81 54024 5efe782218501582f1bd1194c79c5005
props: 11057 30210 112 0 64942f9576ccbd6a94350596bbb7a5cc
cpath: /trunk/common/packets.def
copyroot: 15280 /trunk

id: o9u.5ck.r28603/62332
type: file
pred: o9u.5ck.r28590/1767
count: 64
text: 28603 0 22330 26716 05906d458cafc5bc09c77bc5e86244e7
props: 26905 205525 34 0 25e6c2f7558b7484000d4d090dea5b92
cpath: /trunk/common/extras.c
copyroot: 15280 /trunk

id: o9w.5ck.r28603/62575
type: file
pred: o9w.5ck.r28590/2008
count: 64
text: 28603 23653 9991 10769 23f6c67ac8bf4b2aeebf908fc8007ecb
props: 26905 205815 34 0 25e6c2f7558b7484000d4d090dea5b92
cpath: /trunk/common/extras.h
copyroot: 15280 /trunk

PLAIN
K 11
Makefile.am
V 24
file 5h.5ck.r27888/80675
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.r28596/94269
K 9
actions.h
V 25
file r7c.5ck.r28596/94517
K 4
ai.c
V 26
file 4go.5ck.r26905/200613
K 4
ai.h
V 25
file 4gp.5ck.r28012/36147
K 6
aicore
V 24
dir 18t.5ck.r28596/96606
K 6
base.c
V 25
file 3jw.5ck.r27223/37135
K 6
base.h
V 25
file 3jx.5ck.r27876/17009
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 22
file q.5ck.r28571/2492
K 6
city.h
V 22
file 3q.5ck.r28482/854
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 23
file un.5ck.r27857/9823
K 12
connection.h
V 23
file uo.5ck.r27799/1027
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 25
file 15r.5ck.r28218/18929
K 8
dataio.h
V 24
file 15s.5ck.r28561/3518
K 13
dataio_json.c
V 25
file 1m61.5ck.r28591/9017
K 13
dataio_json.h
V 25
file 1m63.5ck.r28591/9206
K 11
diptreaty.c
V 24
file 3r.5ck.r27517/13334
K 11
diptreaty.h
V 24
file 3s.5ck.r27517/13575
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.r28352/27860
K 9
effects.h
V 25
file 2ep.5ck.r28352/28105
K 8
events.c
V 24
file 33h.5ck.r28400/6662
K 8
events.h
V 23
file 3t.5ck.r28400/6903
K 8
extras.c
V 25
file o9u.5ck.r28603/62332
K 8
extras.h
V 25
file o9w.5ck.r28603/62575
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 25
file 4up.5ck.r28203/18105
K 14
fc_interface.h
V 25
file 4uq.5ck.r28203/18355
K 10
fc_types.h
V 24
file 2ll.5ck.r28514/8862
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 24
file 3u.5ck.r28472/12483
K 6
game.h
V 24
file 3v.5ck.r28472/12723
K 19
generate_packets.py
V 24
file 2f4.5ck.r28591/8765
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 22
file r.5ck.r27605/1397
K 5
map.h
V 23
file 41.5ck.r27446/5985
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.r27973/10772
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.r28218/18441
K 11
packets.def
V 25
file 2f5.5ck.r28603/62083
K 9
packets.h
V 24
file 44.5ck.r28218/18685
K 14
packets_json.c
V 24
file 1m64.5ck.r28521/840
K 14
packets_json.h
V 25
file 1m65.5ck.r28521/1026
K 8
player.c
V 23
file 45.5ck.r28571/2730
K 8
player.h
V 24
file 46.5ck.r26824/28997
K 14
requirements.c
V 24
file 2wq.5ck.r28514/8610
K 14
requirements.h
V 23
file 2wr.5ck.r27694/573
K 10
research.c
V 25
file 4ro.5ck.r27899/33355
K 10
research.h
V 24
file 4rp.5ck.r27750/1056
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 25
file 6pr.5ck.r27876/17736
K 10
scriptcore
V 24
dir 75a.5ck.r28012/35901
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 23
file u.5ck.r27876/17497
K 9
terrain.c
V 24
file 2fp.5ck.r27149/7564
K 9
terrain.h
V 24
file qs.5ck.r27876/16764
K 6
tile.c
V 26
file 2ys.5ck.r27620/186567
K 6
tile.h
V 25
file 2yt.5ck.r26109/28279
K 13
traderoutes.c
V 25
file bf8.5ck.r27547/37733
K 13
traderoutes.h
V 25
file bfa.5ck.r27547/37984
K 8
traits.h
V 26
file 7k3.5ck.r26905/202065
K 6
unit.c
V 23
file v.5ck.r28596/94763
K 6
unit.h
V 24
file 48.5ck.r28012/36636
K 10
unitlist.c
V 25
file 39m.5ck.r28596/94022
K 10
unitlist.h
V 26
file 39n.5ck.r27611/110113
K 10
unittype.c
V 24
file v9.5ck.r28596/95001
K 10
unittype.h
V 24
file va.5ck.r28596/95248
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 22
file 4dm.5ck.r27638/98
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 22
file o8.5ck.r28026/169
K 10
worklist.h
V 24
file o9.5ck.r18858/98299
END
ENDREP
id: p.5ck.r28603/68337
type: dir
pred: p.5ck.r28596/102360
count: 4207
text: 28603 62821 5503 5503 ca58cbb2d21bc3f0c3057d0a1d1945d2
props: 23743 0 112 0 b2bc91bf125d83375389d51f25ff2c2f
cpath: /trunk/common
copyroot: 15280 /trunk

id: 2lo.5en.r28603/68568
type: file
pred: 2lo.5en.r28596/106224
count: 504
text: 28603 38056 27 1776 001c3066874ea27435660c16f9453ec5
props: 17663 394 136 0 3ab197576d3eab59f498bb0d6a363f31
cpath: /trunk/fc_version
copyroot: 17672 /trunk/fc_version

PLAIN
K 9
ABOUT-NLS
V 24
file fu.5ck.r27270/69307
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.r27473/7455495
K 7
INSTALL
V 22
file 6.5ck.r27777/1982
K 11
Makefile.am
V 23
file 59.5ck.r28500/4398
K 4
NEWS
V 24
file 6m.5ck.r25634/30702
K 6
README
V 20
file 7.0.r4421/96382
K 2
ai
V 23
dir 8.5ck.r28596/105995
K 10
autogen.sh
V 23
file 12o.5ck.r27624/562
K 9
bootstrap
V 23
dir 2p5.5ck.r28597/3682
K 6
client
V 22
dir d.5ck.r28603/61849
K 6
common
V 22
dir p.5ck.r28603/68337
K 12
configure.ac
V 24
file 149.5ck.r28586/4651
K 4
data
V 22
dir w.5ck.r28603/57083
K 12
dependencies
V 24
dir 2yu.5ck.r28380/20457
K 3
doc
V 24
dir k7.5ck.r28596/111214
K 10
fc_version
V 25
file 2lo.5en.r28603/68568
K 11
gen_headers
V 24
dir 1hsw.5ck.r28586/5208
K 2
m4
V 23
dir 12p.5ck.r28506/3605
K 7
scripts
V 23
dir 2yo.5ck.r27213/1366
K 6
server
V 22
dir z.5ck.r28603/45165
K 5
tests
V 23
dir 2g9.5ck.r27783/1363
K 5
tools
V 24
dir 4pj.5js.r28603/40525
K 12
translations
V 23
dir t0a.5ck.r28558/3824
K 7
utility
V 22
dir 1c.5ck.r28586/4421
K 5
win32
V 23
dir 2eu.5ck.r28347/2148
END
ENDREP
id: 3.5ck.r28603/69954
type: dir
pred: 3.5ck.r28601/6080
count: 19341
text: 28603 68818 1123 1123 2bd52d9d8571c4e1a4c0e376de3cf3a6
props: 28036 14655 292 0 9e1d5de0253c723466868990c52c129f
cpath: /trunk
copyroot: 15280 /trunk

PLAIN
K 8
branches
V 20
dir 1.0.r28602/15933
K 4
tags
V 19
dir 2.0.r28528/6475
K 5
trunk
V 22
dir 3.5ck.r28603/69954
K 7
website
V 21
dir 3ge.0.r22980/2263
END
ENDREP
id: 0.0.r28603/70348
type: dir
pred: 0.0.r28602/16255
count: 28603
text: 28603 70181 154 154 734e66c8a937ddae23d905ce63699c63
cpath: /
copyroot: 0 /

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

gl.5es.t28602-1 modify true false /trunk/data/multiplayer/terrain.ruleset

fbi.5ck.t28602-1 modify true false /trunk/data/alien/terrain.ruleset

fuy.5ck.t28602-1 modify true false /trunk/data/civ2civ3/terrain.ruleset

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

8w.5ck.t28602-1 modify true false /trunk/server/ruleset.c

4kg.5ck.t28602-1 modify true false /trunk/data/experimental/terrain.ruleset

155n.5ck.t28602-1 modify true false /trunk/data/stub/terrain.ruleset

2lo.5en.t28602-1 modify true false /trunk/fc_version

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

2f5.5ck.t28602-1 modify true false /trunk/common/packets.def

thd.5js.t28602-1 modify true false /trunk/tools/ruledit/rulesave.c

gl.5jq.t28602-1 modify true false /trunk/data/classic/terrain.ruleset

gd.5ck.t28602-1 modify true false /trunk/data/civ1/terrain.ruleset

gi.5ck.t28602-1 modify true false /trunk/data/civ2/terrain.ruleset


70348 70498
