============
THINGS TO DO
============

Freeciv is quite mature, and we think its already a great game,
but there are always things to add or improve.  This file lists
some new features which are being worked on, or are planned, or
desired.  (See also the file BUGS, for some known deficiencies.)

TODO:
=====

- Server-side player scripting.

- Diplomacy:
  * Senate
  * AI handle diplomacy

- Better graphics for city styles.

- Better internationalization (fix some problems, modify those
  English sentences which can not be translated into most other
  languages, better gui handling for different-length words,
  mixed language client-server, more complete translations,
  more languages).

- Make the rulesets for City Improvements and Wonders more flexible.

- Make the code view-agnostic: remove assumptions about which tiles are
  valid. Fx the assumption that the map wraps in the x direction. This
  can be done by making the code use macros like whole_map_iterate and
  square_iterate. The functions map_adjust_x() and map_adjust_y() should
  be removed and code that use them made to use normalize_map_pos(),
  is_real_tile() or a macro.
  It would also be nice to remove the assumption that the x values go
  [0..map.xsize[, as a proposed isometric numbering scheme doesn't have
  that property.
  When all code is converted the whole of the freeciv server can be
  adjusted to use a flat map, an isometric map, a torus map or maybe
  even a hex map, all by changing a very limited amount of code in
  the right places.
  Note that the AI in various places do not adjust tiles properly even
  for the current numbering scheme.
  Note that the conversion is backwards compatible, so it can be done in
  small steps. No mega-patches please.

- Stop the server from sending text to the clients. Instead it should
  send an enum and some values, which the client converted to a message
  to show to the user. This will give the client more knowledge of the
  content of the messages, needed for fx a client side AI. It will also
  mean that the messages are automatically correctly localized.
  Note that these new messages will have to sometimes contain city names.
  A possibility of sending text should still exist, to avoid
  compatability breakage when changing the server.

- Create a new "ocean" variable in the tile struct, similar to the
  "continent" variable. It needs assisiated functions to be kept up to date
  in both the server and the client. It should also have an associated
  function is_oceans_connected(ocean1, ocean2, player) that returns if
  a city exists that connects the two oceans for that player.

- Document/cleanup AI code. Rename variables to more saying names than these:
  int a, c, d, e, i, a0, b0, f, g, fprime;
  int j, k, l, m, q;
  (taken from ai/advmilitary.c:process_attacker_want())
  I would especially like to have the use of the amortize() function in
  server/settlers.c documented.
  I will apply patches even if they just rename a single variable.

- Implement goto in common code

FURTHER INFORMATION:
====================

Information on other projects, and the Freeciv development
"roadmap", are available at the Freeciv website:

        http://www.freeciv.org/
