DELTA 19087 4598 573
SVN  ‡‰	Iý9 …J €‡" G €‹ G €…R G €‚ G €¥ G €ƒ G €Œ* G €… G €†U @ €…	 G €… G €—\fc_config.h>
#endif

/* common */
#include "game.h"
#include "government.h"
#include "map.h"
#include "research.h"

/* server */
#include "cityturn.h"
#include "plrhand.h"

/* server/advisors */
#include "advdata.h"

/* ai */
#include "advdiplomacy.h"
#include "aicity.h"
#include "aiferry.h"
#include "aiplayer.h"
#include "aisettler.h"
#include "aiunit.h"
#include "daieffects.h"

#include "aidata.h"

static void dai_diplomacy_new(struct ai_type *ait,
                              const struct player *plr1,
                              const struct player *plr2);
static void dai_diplomacy_defaults(struct ai_type *ait,
                                   const struct player *plr1,
                                   const struct player *plr2);
static void dai_diplomacy_destroy(struct ai_type *ait,
                                  const struct player *plr1,
                                  const struct player *plr2);

******
  Initialize ai data structure
****************************************************************************/
void dai_data_init(struct ai_type *ait, struct player *pplayer)
{
  struct ai_plr *ai = def_ai_player_data(pplayer, ait);

  ai->phase_initialized = FALSE;

  ai->last_num_continents = -1;
  ai->last_num_oceans = -1;

  ai->diplomacy.player_intel_slots
    = fc_calloc(player_slot_count(),
                sizeof(*ai->diplomacy.player_intel_slots));
  player_slots_iterate(pslot) {
    const struct ai_dip_intel **player_intel_slot
      = ai->diplomacy.player_intel_slots + player_slot_index(pslot);
    *player_intel_slot = NULL;
  } player_slots_iterate_end;

  players_iterate(aplayer) {
    /* create ai diplomacy states for all other players */
    dai_diplomacy_new(ait, pplayer, aplayer);
    dai_diplomacy_defaults(ait, pplayer, aplayer);
    /* create ai diplomacy state of this player */
    if (aplayer != pplayer) {
      dai_diplomacy_new(ait, aplayer, pplayer);
      dai_diplomacy_defaults(ait, aplayer, pplayer);
    }
  } players_iterate_end;

  ai->diplomacy.strategy = WIN_OPEN;
  ai->diplomacy.timer = 0;
  ai->diplomacy.love_coeff = 4; /* 4% */
  ai->diplomacy.love_incr = MAX_AI_LOVE * 3 / 100;
  ai->diplomacy.req_love_for_peace = MAX_AI_LOVE / 8;
  ai->diplomacy.req_love_for_alliance = MAX_AI_LOVE / 4;

  ai->settler = NULL;

  /* Initialise autosettler. */
  dai_auto_settler_init(ai);
}

******
  Deinitialize ai data structure
****************************************************************************/
void dai_data_close(struct ai_type *ait, struct player *pplayer)
{
  struct ai_plr *ai = def_ai_player_data(pplayer, ait);

  /* Free autosettler. */
  dai_auto_settler_free(ai);

  if (ai->diplomacy.player_intel_slots != NULL) {
    players_iterate(aplayer) {
      /* destroy the ai diplomacy states of this player with others ... */
      dai_diplomacy_destroy(ait, pplayer, aplayer);
      /* and of others with this player. */
      if (aplayer != pplayer) {
        dai_diplomacy_destroy(ait, aplayer, pplayer);
      }
    } players_iterate_end;
    free(ai->diplomacy.player_intel_slots);
  }
}

****
  Return whether data phase is currently open. Data phase is open
  between dai_data_phase_begin() and dai_data_phase_finished() calls.
**************************************************************************/
bool is_ai_data_phase_open(struct ai_type *ait, struct player *pplayer)
{
  struct ai_plr *ai = def_ai_player_data(pplayer, ait);

  return ai->phase_initialized;
}

******
  Make and cache lots of calculations needed for other functions.
****************************************************************************/
void dai_data_phase_begin(struct ai_type *ait, struct player *pplayer,
                          bool is_new_phase)
{
  struct ai_plr *ai = def_ai_player_data(pplayer, ait);
  bool close;

  /* Note that this refreshes advisor data if needed. ai_plr_data_get()
     is expected to refresh advisor data if needed, and ai_plr_data_get()
     depends on this call
     ai_plr_data_get()->ai_data_phase_begin()->adv_data_get() to do it.
     If you change this, you may need to adjust ai_plr_data_get() also. */
  struct adv_data *adv;

  if (ai->phase_initialized) {
    return;
  }

  ai->phase_initialized = TRUE;

  adv = adv_data_get(pplayer, &close);

  /* Store current number of known continents and oceans so we can compare
     against it later in order to see if ai data needs refreshing. */
  ai->last_num_continents = adv->num_continents;
  ai->last_num_oceans = adv->num_oceans;

  /*** Diplomacy ***/
  if (pplayer->ai_controlled && !is_barbarian(pplayer) && is_new_phase) {
    dai_diplomacy_begin_new_phase(ait, pplayer);
  }

  /* Set per-player variables. We must set all players, since players
   * can be created during a turn, and we don't want those to have
   * invalid values. */
  players_iterate(aplayer) {
    struct ai_dip_intel *adip = dai_diplomacy_get(ait, pplayer, aplayer);

    adip->is_allied_with_enemy = NULL;
    adip->at_war_with_ally = NULL;
    adip->is_allied_with_ally = NULL;

    players_iterate(check_pl) {
      if (check_pl == pplayer
          || check_pl == aplayer
          || !check_pl->is_alive) {
        continue;
      }
      if (pplayers_allied(aplayer, check_pl)
          && player_diplstate_get(pplayer, check_pl)->type == DS_WAR) {
       adip->is_allied_with_enemy = check_pl;
      }
      if (pplayers_allied(pplayer, check_pl)
          && player_diplstate_get(aplayer, check_pl)->type == DS_WAR) {
        adip->at_war_with_ally = check_pl;
      }
      if (pplayers_allied(aplayer, check_pl)
          && pplayers_allied(pplayer, check_pl)) {
        adip->is_allied_with_ally = check_pl;
      }
    } players_iterate_end;
  } players_iterate_end;

  /*** Statistics ***/

  ai->stats.workers = fc_calloc(adv->num_continents + 1, sizeof(int));
  unit_list_iterate(pplayer->units, punit) {
    struct tile *ptile = unit_tile(punit);

    if (!is_ocean_tile(ptile) && unit_has_type_flag(punit, UTYF_SETTLERS)) {
      ai->stats.workers[(int)tile_continent(unit_tile(punit))]++;
    }
  } unit_list_iterate_end;

  BV_CLR_ALL(ai->stats.diplomat_reservations);
  unit_list_iterate(pplayer->units, punit) {
    if ((unit_can_do_action(punit, ACTION_SPY_POISON)
         || unit_can_do_action(punit, ACTION_SPY_SABOTAGE_CITY)
         || unit_can_do_action(punit, ACTION_SPY_TARGETED_SABOTAGE_CITY)
         || unit_can_do_action(punit, ACTION_SPY_INCITE_CITY)
         || unit_can_do_action(punit, ACTION_ESTABLISH_EMBASSY)
         || unit_can_do_action(punit, ACTION_SPY_STEAL_TECH)
         || unit_can_do_action(punit, ACTION_SPY_TARGETED_STEAL_TECH)
         || unit_can_do_action(punit, ACTION_SPY_INVESTIGATE_CITY)
         || unit_can_do_action(punit, ACTION_SPY_STEAL_GOLD))
        && def_ai_unit_data(punit, ait)->task == AIUNIT_ATTACK) {

      fc_assert_msg(punit->goto_tile != NULL, "No target city for spy action");

      if (punit->goto_tile != NULL) {
        struct city *pcity = tile_city(punit->goto_tile);

        if (pcity != NULL) {
          /* Heading somewhere on a mission, reserve target. */
          BV_SET(ai->stats.diplomat_reservations, pcity->id);
        }
      }
    }
  } unit_list_iterate_end;

  aiferry_init_stats(ait, pplayer);

  /*** Interception engine ***/

  /* We are tracking a unit if punit->server.ai->cur_pos is not NULL. If we
   * are not tracking, start tracking by setting cur_pos. If we are,
   * fill prev_pos with previous cur_pos. This way we get the 
   * necessary coordinates to calculate a probable trajectory. */
  players_iterate_alive(aplayer) {
    if (aplayer == pplayer) {
      continue;
    }
    unit_list_iterate(aplayer->units, punit) {
      struct unit_ai *unit_data = def_ai_unit_data(punit, ait);

      if (!unit_data->cur_pos) {
        /* Start tracking */
        unit_data->cur_pos = &unit_data->cur_struct;
        unit_data->prev_pos = NULL;
      } else {
        unit_data->prev_struct = unit_data->cur_struct;
        unit_data->prev_pos = &unit_data->prev_struct;
      }
      *unit_data->cur_pos = unit_tile(punit);
    } unit_list_iterate_end;
  } players_iterate_alive_end;

  if (close) {
    adv_data_phase_done(pplayer);
  }
}

******
  Clean up ai data after phase finished.
****************************************************************************/
void dai_data_phase_finished(struct ai_type *ait, struct player *pplayer)
{
  struct ai_plr *ai = def_ai_player_data(pplayer, ait);

  if (!ai->phase_initialized) {
    return;
  }

  free(ai->stats.workers);
  ai->stats.workers = NULL;

  ai->phase_initialized = FALSE;
}

******
  Get current default ai data related to player.
  If close is set, data phase will be opened even if it's currently closed,
  and the boolean will be set accordingly to tell caller that phase needs
  closing.
****************************************************************************/
struct ai_plr *dai_plr_data_get(struct ai_type *ait, struct player *pplayer,
                                bool *close)
{
  struct ai_plr *ai = def_ai_player_data(pplayer, ait);

  fc_assert_ret_val(ai != NULL, NULL);

  /* This assert really is required. See longer comment
     in adv_data_get() for equivalent code. */
#if defined(DEBUG) || defined(IS_DEVEL_VERSION)
  fc_assert(close != NULL || ai->phase_initialized);
#endif

  if (close != NULL) {
    *close = FALSE;
  }

  if (ai->last_num_continents != map.num_continents
      || ai->last_num_oceans != map.num_oceans) {
    /* We have discovered more continents, recalculate! */

    /* See adv_data_get() */
    if (ai->phase_initialized) {
      dai_data_phase_finished(ait, pplayer);
      dai_data_phase_begin(ait, pplayer, FALSE);
    } else {
      /* wrong order */
      log_debug("%s ai data phase closed when dai_plr_data_get() called",
                player_name(pplayer));
      dai_data_phase_begin(ait, pplayer, FALSE);
      if (close != NULL) {
        *close = TRUE;
      } else {
        dai_data_phase_finished(ait, pplayer);
      }
    }
  } else {
    if (!ai->phase_initialized && close != NULL) {
      dai_data_phase_begin(ait, pplayer, FALSE);
      *close = TRUE;
    }
  }

  return ai;
}

******
  Allocate new ai diplomacy slot
****************************************************************************/
static void dai_diplomacy_new(struct ai_type *ait,
                              const struct player *plr1,
                              const struct player *plr2)
{
  struct ai_dip_intel *player_intel;

  fc_assert_ret(plr1 != NULL);
  fc_assert_ret(plr2 != NULL);

  const struct ai_dip_intel **player_intel_slot
    = def_ai_player_data(plr1, ait)->diplomacy.player_intel_slots
      + player_index(plr2);

  fc_assert_ret(*player_intel_slot == NULL);

  player_intel = fc_calloc(1, sizeof(*player_intel));
  *player_intel_slot = player_intel;
}

******
  Set diplomacy data between two players to its default values.
****************************************************************************/
static void dai_diplomacy_defaults(struct ai_type *ait,
                                   const struct player *plr1,
                                   const struct player *plr2)
{
  struct ai_dip_intel *player_intel = dai_diplomacy_get(ait, plr1, plr2);

  fc_assert_ret(player_intel != NULL);

  /* pseudorandom value */
  player_intel->spam = (player_index(plr1) + player_index(plr2)) % 5;
  player_intel->countdown = -1;
  player_intel->war_reason = WAR_REASON_NONE;
  player_intel->distance = 1;
  player_intel->ally_patience = 0;
  player_intel->asked_about_peace = 0;
  player_intel->asked_about_alliance = 0;
  player_intel->asked_about_ceasefire = 0;
  player_intel->warned_about_space = 0;
}


  Returns diplomatic state type between two players
***************************************************************/
struct ai_dip_intel *dai_diplomacy_get(struct ai_type *ait,
                                       const struct player *plr1,
                                       const struct player *plr2)
{
  fc_assert_ret_val(plr1 != NULL, NULL);
  fc_assert_ret_val(plr2 != NULL, NULL);

  const struct ai_dip_intel **player_intel_slot
    = def_ai_player_data(plr1, ait)->diplomacy.player_intel_slots
      + player_index(plr2);

  fc_assert_ret_val(player_intel_slot != NULL, NULL);

  return (struct ai_dip_intel *) *player_intel_slot;
}

******
  Free resources allocated for diplomacy information between two players.
****************************************************************************/
static void dai_diplomacy_destroy(struct ai_type *ait,
                                  const struct player *plr1,
                                  const struct player *plr2)
{
  fc_assert_ret(plr1 != NULL);
  fc_assert_ret(plr2 != NULL);

  const struct ai_dip_intel **player_intel_slot
    = def_ai_player_data(plr1, ait)->diplomacy.player_intel_slots
      + player_index(plr2);

  if (*player_intel_slot != NULL) {
    free(dai_diplomacy_get(ait, plr1, plr2));
  }

  *player_intel_slot = NULL;
}

******
  Set value of the government.
****************************************************************************/
void dai_gov_value(struct ai_type *ait, struct player *pplayer,
                   struct government *gov, int *val, bool *override)
{
  int dist;
  int bonus = 0; /* in percentage */
  int revolution_turns;
  struct universal source = { .kind = VUT_GOVERNMENT, .value.govern = gov };
  struct adv_data *adv;
  int turns = 9999; /* TODO: Set to correct value */
  int nplayers;
  const struct research *presearch;

  /* Use default handling of no-cities case */
  if (city_list_size(pplayer->cities) == 0) {
    *override = FALSE;
    return;
  }

  adv = adv_data_get(pplayer, NULL);
  nplayers = normal_player_count();
  presearch = research_get(pplayer);

  pplayer->government = gov;
  /* Ideally we should change tax rates here, but since
   * this is a rather big CPU operation, we'd rather not. */
  check_player_max_rates(pplayer);
  city_list_iterate(pplayer->cities, acity) {
    auto_arrange_workers(acity);
  } city_list_iterate_end;
  city_list_iterate(pplayer->cities, pcity) {
    bool capital;

    *val += dai_city_want(pplayer, pcity, adv, NULL);
    capital = is_capital(pcity);

    effect_list_iterate(get_req_source_effects(&source), peffect) {
      bool present = TRUE;
      bool active = TRUE;

      requirement_vector_iterate(&peffect->reqs, preq) {
        /* Check if all the requirements for the currently evaluated effect
         * are met, except for having the tech that we are evaluating.
         * TODO: Consider requirements that could be met later. */
        if (VUT_GOVERNMENT == preq->source.kind
            && preq->source.value.govern == gov) {
          present = preq->present;
          continue;
        }
        if (!is_req_active(pplayer, NULL, pcity, NULL, NULL, NULL, NULL,
                           NULL, NULL, preq, RPT_POSSIBLE)) {
          active = FALSE;
          break; /* presence doesn't matter for inactive effects. */
        }

      } requirement_vector_iterate_end;

      if (active) {
        int v1;

        v1 = dai_effect_value(pplayer, gov, adv, pcity, capital,
                              turns, peffect, 1,
                              nplayers);

        if (!present) {
          /* Tech removes the effect */
          *val -= v1;
        } else {
          *val += v1;
        }
      }
    } effect_list_iterate_end;
  } city_list_iterate_end;

  revolution_turns = get_player_bonus(pplayer, EFT_REVOLUTION_UNHAPPINESS);
  if (revolution_turns > 0) {
    bonus -= 6 / revolution_turns;
  }

  *val += (*val * bonus) / 100;

  /* FIXME: handle reqs other than technologies. */
  dist = 0;
  requirement_vector_iterate(&gov->reqs, preq) {
    if (VUT_ADVANCE == preq->source.kind) {
      dist += MAX(1, research_goal_unknown_techs(presearch,
                                                 advance_number(preq->source.value.advance)));
    }
  } requirement_vector_iterate_end;
  *val = amortize(*val, dist);

  *override = TRUE;
}
ENDREP
DELTA 29282 1686 64
SVN  †  †  ' û § …¤Gúadv_unit_new_task(punit, AUT_NONE, NULL†  ‚õ+‚õe:º ‚õ+ get(punit);

  fc_assert_ret(ptrans);

  unit_transport_unENDREP
id: 6mb.5sk.r29289/16336
type: file
pred: 6mb.5gl.r27441/198
count: 32
text: 29289 0 16143 17545 0189ab7ec6bd876c80e8e517c6fe448c
props: 26905 231619 34 0 25e6c2f7558b7484000d4d090dea5b92
cpath: /branches/S2_6/ai/default/aidata.c
copyroot: 19757 /trunk/ai/default/aidata.c

PLAIN
K 11
Makefile.am
V 24
file 6k4.5ck.r26385/1025
K 14
advdiplomacy.c
V 24
file 2ek.5qt.r28986/1220
K 14
advdiplomacy.h
V 25
file 2el.5ga.r21819/30478
K 13
advdomestic.c
V 24
file 1m.5qz.r27612/34960
K 13
advdomestic.h
V 24
file 1n.5gc.r21819/29385
K 13
advmilitary.c
V 21
file 1u.5gd.r27406/49
K 13
advmilitary.h
V 23
file 1v.5ge.r27368/1068
K 7
aiair.c
V 25
file 15y.5gh.r25618/11812
K 7
aiair.h
V 25
file 15z.5gi.r21819/33076
K 8
aicity.c
V 23
file 20.5r8.r29155/2551
K 8
aicity.h
V 24
file 21.5gk.r26118/23854
K 8
aidata.c
V 25
file 6mb.5sk.r29289/16336
K 8
aidata.h
V 24
file 6mc.5re.r27695/6275
K 12
aidiplomat.c
V 25
file 16r.5rl.r28285/52648
K 12
aidiplomat.h
V 25
file 16s.5go.r21819/32802
K 9
aiferry.c
V 25
file 2iw.5ra.r27612/34682
K 9
aiferry.h
V 24
file 2ix.5gq.r25299/3783
K 9
aiguard.c
V 25
file 335.5gr.r21830/20422
K 9
aiguard.h
V 25
file 336.5rp.r28076/25981
K 8
aihand.c
V 24
file 22.5gt.r26403/72867
K 8
aihand.h
V 24
file 23.5gu.r21810/35768
K 8
aihunt.c
V 24
file 2gc.5gv.r27262/1352
K 8
aihunt.h
V 25
file 2gd.5gw.r21819/35411
K 7
ailog.c
V 25
file 6p8.5s8.r28854/25132
K 7
ailog.h
V 26
file 6p9.5gy.r26905/232907
K 15
aiparatrooper.c
V 25
file 36o.5gz.r25697/34657
K 15
aiparatrooper.h
V 25
file 36p.5h0.r25366/42160
K 10
aiplayer.c
V 25
file 6i3.5sh.r29067/41148
K 10
aiplayer.h
V 26
file 6i4.5h2.r26905/231348
K 11
aisettler.c
V 24
file 2lh.5r9.r29015/5354
K 11
aisettler.h
V 25
file 2li.5h4.r22374/17958
K 8
aitech.c
V 24
file 24.5h5.r26176/24077
K 8
aitech.h
V 23
file 25.5h6.r25452/2151
K 9
aitools.c
V 23
file 9.5rb.r27612/35248
K 9
aitools.h
V 23
file a.5h8.r25366/39676
K 8
aiunit.c
V 23
file b.5r7.r27612/35522
K 8
aiunit.h
V 22
file c.5ha.r27289/1005
K 12
daieffects.c
V 24
file 156e.5qi.r29278/315
K 12
daieffects.h
V 27
file 156g.5ck.r26905/233221
END
ENDREP
id: 6k3.5qi.r29289/18409
type: dir
pred: 6k3.5qi.r29278/2376
count: 368
text: 29289 16610 1786 0 7a45991709e820bbfccca2ba67998598
props: 19010 5510 53 0 1aad128f6d028f535e9ce7233326568e
cpath: /branches/S2_6/ai/default
copyroot: 27474 /branches/S2_6

PLAIN
K 11
Makefile.am
V 24
file 5d.5ck.r26100/14492
K 10
aitraits.c
V 26
file 7k0.5ck.r26905/229736
K 10
aitraits.h
V 26
file 7k2.5ck.r26905/225228
K 7
classic
V 23
dir l53.5qi.r29025/1100
K 7
default
V 24
dir 6k3.5qi.r29289/18409
K 12
difficulty.c
V 25
file 1b4x.5ck.r27304/6957
K 12
difficulty.h
V 27
file 1b4z.5ck.r26905/225513
K 11
handicaps.c
V 26
file syo.5ck.r26905/225805
K 11
handicaps.h
V 26
file syq.5ck.r26905/226737
K 4
stub
V 25
dir 6k5.5ck.r26905/226459
K 8
threaded
V 24
dir 6pi.5qi.r28927/32103
END
ENDREP
id: 8.5qi.r29289/19184
type: dir
pred: 8.5qi.r29278/3147
count: 1812
text: 29289 18660 511 0 87d468c8a180a3811264201cdccdc18a
props: 11108 11315 64 0 abac628483ea4fdfa3bea3a3a56e0532
cpath: /branches/S2_6/ai
copyroot: 27474 /branches/S2_6

id: 1a.5qi.r29289/19424
type: file
pred: 1a.5qi.r29282/24191
count: 763
text: 29289 16171 138 150245 c287e36ce9ee9bb4fc819b552873de17
props: 11095 1637 112 0 c5bfe3670c093a84ebf28b66298044e4
cpath: /branches/S2_6/server/unittools.c
copyroot: 27474 /branches/S2_6

PLAIN
K 11
Makefile.am
V 24
file 5q.5qi.r28430/14363
K 13
actiontools.c
V 24
file 1p8q.5qi.r28978/156
K 13
actiontools.h
V 26
file 1p8t.5qi.r28430/14182
K 8
advisors
V 24
dir 4n2.5qi.r29015/10566
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.5qi.r28606/418
K 11
barbarian.h
V 22
file lx.5qi.r28606/673
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 22
file 4g.5qi.r29258/176
K 11
citytools.h
V 23
file 4h.5qi.r29015/8710
K 10
cityturn.c
V 23
file 4i.5qi.r29085/6694
K 10
cityturn.h
V 24
file 4j.5ck.r24742/16670
K 11
civserver.c
V 24
file 4k.5qi.r28076/13954
K 10
commands.c
V 24
file 2ly.5qi.r27913/1890
K 10
commands.h
V 25
file 2lz.5qi.r28013/36715
K 13
connecthand.c
V 25
file 2dw.5qi.r28922/21106
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 21
file 4m.5qi.r28630/83
K 10
diplhand.h
V 23
file 4n.5qi.r27518/5128
K 11
diplomats.c
V 22
file vz.5qi.r29196/557
K 11
diplomats.h
V 23
file w0.5ck.r27461/1674
K 10
edithand.c
V 25
file 3bk.5qi.r27612/42316
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 24
file 4o.5qi.r29282/22894
K 10
gamehand.h
V 24
file 4p.5ck.r26564/23149
K 9
generator
V 23
dir 2me.5qi.r28864/2289
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.5qi.r28913/54846
K 9
maphand.h
V 23
file 14.5ck.r24759/3742
K 6
meta.c
V 24
file 4s.5qi.r28854/10237
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.5qi.r29138/25938
K 9
plrhand.h
V 25
file 4v.5qi.r28711/185683
K 8
report.c
V 23
file vi.5qi.r28695/4324
K 8
report.h
V 24
file vj.5ck.r24891/20006
K 10
rssanity.c
V 23
file hew.5qi.r29223/345
K 10
rssanity.h
V 25
file hey.5ck.r26905/55500
K 9
ruleset.c
V 22
file 8w.5qi.r29182/281
K 9
ruleset.h
V 22
file 8x.5qi.r27725/899
K 13
sanitycheck.c
V 22
file wi.5ck.r27281/872
K 13
sanitycheck.h
V 24
file wj.5qi.r28076/13693
K 12
savecompat.c
V 24
file qva.5qi.r28860/5746
K 12
savecompat.h
V 24
file qvc.5qi.r29062/7592
K 10
savegame.c
V 24
file vl.5qi.r29108/15647
K 10
savegame.h
V 24
file vm.5ck.r20758/19233
K 11
savegame2.c
V 23
file 4m0.5qi.r29164/594
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.5qi.r28468/1251
K 8
sernet.c
V 24
file 15.5qi.r29282/23153
K 8
sernet.h
V 23
file 4y.5ck.r23685/5129
K 10
settings.c
V 25
file 2m0.5qi.r29282/23411
K 10
settings.h
V 24
file 2m1.5qi.r28748/6857
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 24
file 15t.5rh.r28854/9971
K 9
srv_log.h
V 25
file 15u.5ri.r28013/36974
K 10
srv_main.c
V 24
file vg.5qi.r29282/23673
K 10
srv_main.h
V 24
file vh.5qi.r29282/23936
K 11
stdinhand.c
V 22
file 4z.5qi.r29114/431
K 11
stdinhand.h
V 24
file 50.5ck.r26100/15471
K 11
techtools.c
V 23
file 33n.5qi.r28732/145
K 11
techtools.h
V 24
file 33o.5ck.r27058/2134
K 10
unithand.c
V 23
file 18.5qi.r29272/1714
K 10
unithand.h
V 24
file 19.5ck.r23027/66151
K 11
unittools.c
V 24
file 1a.5qi.r29289/19424
K 11
unittools.h
V 23
file 1b.5qi.r29212/1520
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.5qi.r29289/23638
type: dir
pred: z.5qi.r29282/28401
count: 5967
text: 29289 19688 3937 0 5f3f6a9e328ed997847626adc8c6dc30
props: 23990 448 166 0 e5026e1cb18fe57b41417951bfac7b19
cpath: /branches/S2_6/server
copyroot: 27474 /branches/S2_6

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 23
file 6.5qi.r29069/19127
K 11
Makefile.am
V 23
file 59.5qi.r29105/3150
K 4
NEWS
V 24
file 6m.5ck.r25634/30702
K 6
README
V 20
file 7.0.r4421/96382
K 2
ai
V 22
dir 8.5qi.r29289/19184
K 10
autogen.sh
V 24
file 12o.5ck.r25794/4003
K 9
bootstrap
V 23
dir 2p5.5qi.r28598/3780
K 6
client
V 22
dir d.5qi.r29282/16079
K 6
common
V 21
dir p.5qi.r29285/6244
K 12
configure.ac
V 25
file 149.5qi.r29185/54603
K 4
data
V 22
dir w.5qi.r29252/12204
K 12
dependencies
V 24
dir 2yu.5qi.r29208/47397
K 3
doc
V 23
dir k7.5qi.r29180/11606
K 10
fc_version
V 25
file 2lo.5qj.r29282/22639
K 11
gen_headers
V 25
dir 1hsw.5qi.r29185/55201
K 2
m4
V 23
dir 12p.5qi.r29105/5906
K 7
scripts
V 23
dir 2yo.5qi.r28717/5437
K 6
server
V 22
dir z.5qi.r29289/23638
K 5
tests
V 22
dir 2g9.5ck.r27023/734
K 5
tools
V 24
dir 4pj.5qp.r29185/61214
K 12
translations
V 25
dir t0a.5qi.r29243/148658
K 7
utility
V 22
dir 1c.5qi.r29247/9644
K 3
vms
V 25
dir u9.5ck.r21528/1396085
K 5
win32
V 23
dir 2eu.5qi.r28346/1712
END
ENDREP
id: 3.5qi.r29289/25060
type: dir
pred: 3.5qi.r29285/7660
count: 19510
text: 29289 23883 1164 0 30208281d75afc93112375af304d44f7
props: 28037 14463 292 0 9e1d5de0253c723466868990c52c129f
cpath: /branches/S2_6
copyroot: 27474 /branches/S2_6

PLAIN
K 5
S1_14
V 21
dir 3.21.r18109/18803
K 4
S2_0
V 21
dir 3.10x.r21862/4178
K 4
S2_1
V 22
dir 3.59e.r20026/11014
K 4
S2_2
V 21
dir 3.5cy.r21861/5036
K 4
S2_3
V 21
dir 3.5f2.r24391/5183
K 4
S2_4
V 22
dir 3.5ii.r29190/93761
K 4
S2_5
V 22
dir 3.5kv.r29283/49697
K 4
S2_6
V 22
dir 3.5qi.r29289/25060
K 11
freeciv-web
V 22
dir 3.5bl.r13594/14918
END
ENDREP
id: 1.0.r29289/25655
type: dir
pred: 1.0.r29285/8253
count: 9468
text: 29289 25300 342 0 1b41556f2e5453289a5da8e065cd34b6
cpath: /branches
copyroot: 0 /

PLAIN
K 8
branches
V 20
dir 1.0.r29289/25655
K 4
tags
V 19
dir 2.0.r28528/6475
K 5
trunk
V 21
dir 3.5ck.r29288/9369
K 7
website
V 21
dir 3ge.0.r22980/2263
END
ENDREP
id: 0.0.r29289/25975
type: dir
pred: 0.0.r29288/9757
count: 29289
text: 29289 25809 153 0 5c3a7407441dab22d7a9418605742c81
cpath: /
copyroot: 0 /

6mb._0.t29288-1 modify true false /branches/S2_6/ai/default/aidata.c

1a.5qi.t29288-1 modify true false /branches/S2_6/server/unittools.c


25975 26122
