[Freeciv-Dev] (PR#37634) [Patch] Fixes to non-air units with fuel

2007-03-05 Thread Marko Lindqvist

http://bugs.freeciv.org/Ticket/Display.html?id=37634 >

 This fixes some problems with air units *without* fuel and non-air
units *with* fuel.


 - ML

diff -Nurd -X.diff_ignore freeciv/common/unit.c freeciv/common/unit.c
--- freeciv/common/unit.c	2007-03-06 03:34:32.0 +0200
+++ freeciv/common/unit.c	2007-03-06 07:26:56.0 +0200
@@ -992,7 +992,7 @@
   switch(punit->activity) {
case ACTIVITY_IDLE:
  moves_str = _("Moves");
- if (is_air_unit(punit) && unit_type(punit)->fuel > 0) {
+ if (unit_type(punit)->fuel) {
int rate,f;
rate=unit_type(punit)->move_rate/SINGLE_MOVE;
f=((punit->fuel)-1);
diff -Nurd -X.diff_ignore freeciv/server/unittools.c freeciv/server/unittools.c
--- freeciv/server/unittools.c	2007-03-06 03:34:32.0 +0200
+++ freeciv/server/unittools.c	2007-03-06 07:22:12.0 +0200
@@ -348,7 +348,7 @@
 }
 
 /* 4) Rescue planes if needed */
-if (is_air_unit(punit)) {
+if (unit_type(punit)->fuel) {
   /* Shall we emergency return home on the last vapors? */
 
   /* I think this is strongly against the spirit of client goto.
@@ -441,8 +441,7 @@
 
   /* 7) Check if there are air units without fuel */
   unit_list_iterate_safe(pplayer->units, punit) {
-if (is_air_unit(punit) && punit->fuel <= 0
-&& unit_type(punit)->fuel > 0) {
+if (punit->fuel <= 0 && unit_type(punit)->fuel) {
   notify_player(pplayer, punit->tile, E_UNIT_LOST, 
 		   _("Your %s has run out of fuel."),
 		   unit_name(punit->type));
___
Freeciv-dev mailing list
Freeciv-dev@gna.org
https://mail.gna.org/listinfo/freeciv-dev


[Freeciv-Dev] (PR#37632) [Patch] Unit born turn

2007-03-05 Thread Marko Lindqvist

http://bugs.freeciv.org/Ticket/Display.html?id=37632 >

 This stores turn unit has been born to unit structure. Main reason
for this is to get rid of the barbarian fuel hack.

 Another possibility is just to remove barbarian fuel hack. Seems like
it has never worked (before this patch), anyway. Barbarian fuel was
never set. This means it was zero from the very beginning (meaning
that barbarians have minimum lifespan of zero turns)


 - ML

diff -Nurd -X.diff_ignore freeciv/ai/aiunit.c freeciv/ai/aiunit.c
--- freeciv/ai/aiunit.c	2007-03-06 05:46:13.0 +0200
+++ freeciv/ai/aiunit.c	2007-03-06 07:06:58.0 +0200
@@ -2080,14 +2080,14 @@
 }
 
 /**
-  Barbarian units may disband spontaneously if their age is more then 5,
-  they are not in cities, and they are far from any enemy units. It is to 
-  remove barbarians that do not engage into any activity for a long time.
+  Barbarian units may disband spontaneously if their age is more than
+  BARBARIAN_MIN_LIFESPAN, they are not in cities, and they are far from
+  any enemy units. It is to remove barbarians that do not engage into any
+  activity for a long time.
 **/
 static bool unit_can_be_retired(struct unit *punit)
 {
-  if (punit->fuel > 0) {	/* fuel abused for barbarian life span */
-punit->fuel--;
+  if (punit->born_turn + BARBARIAN_MIN_LIFESPAN > game.info.turn) {
 return FALSE;
   }
 
@@ -2431,7 +2431,8 @@
   } players_iterate_end;
 
   /* Disappearance - 33% chance on coast, when older than barbarian life span */
-  if (is_ocean_near_tile(leader->tile) && leader->fuel == 0) {
+  if (is_ocean_near_tile(leader->tile)
+  && leader->born_turn + BARBARIAN_MIN_LIFESPAN < game.info.turn) {
 if(myrand(3) == 0) {
   UNIT_LOG(LOG_DEBUG, leader, "barbarian leader disappearing...");
   wipe_unit(leader);
diff -Nurd -X.diff_ignore freeciv/common/unit.c freeciv/common/unit.c
--- freeciv/common/unit.c	2007-03-06 03:34:32.0 +0200
+++ freeciv/common/unit.c	2007-03-06 06:44:22.0 +0200
@@ -1268,6 +1268,7 @@
   punit->foul = FALSE;
   punit->debug = FALSE;
   punit->fuel = unit_type(punit)->fuel;
+  punit->born_turn = game.info.turn;
   punit->hp = unit_type(punit)->hp;
   punit->moves_left = unit_move_rate(punit);
   punit->moved = FALSE;
diff -Nurd -X.diff_ignore freeciv/common/unit.h freeciv/common/unit.h
--- freeciv/common/unit.h	2007-03-05 21:11:49.0 +0200
+++ freeciv/common/unit.h	2007-03-06 06:42:46.0 +0200
@@ -133,6 +133,7 @@
   int unhappiness;
   int upkeep[O_MAX];
   int fuel;
+  int born_turn;
   int bribe_cost;
   struct unit_ai ai;
   enum unit_activity activity;
diff -Nurd -X.diff_ignore freeciv/server/barbarian.h freeciv/server/barbarian.h
--- freeciv/server/barbarian.h	2007-03-05 21:09:47.0 +0200
+++ freeciv/server/barbarian.h	2007-03-06 07:05:14.0 +0200
@@ -27,6 +27,8 @@
 
 #define MAP_FACTOR 2000  /* adjust this to get a good uprising frequency */
 
+#define BARBARIAN_MIN_LIFESPAN 5
+
 bool unleash_barbarians(struct tile *ptile);
 void summon_barbarians(void);
 bool is_land_barbarian(struct player *pplayer);
diff -Nurd -X.diff_ignore freeciv/server/diplomats.c freeciv/server/diplomats.c
--- freeciv/server/diplomats.c	2007-03-06 03:34:32.0 +0200
+++ freeciv/server/diplomats.c	2007-03-06 06:45:27.0 +0200
@@ -461,6 +461,7 @@
   gained_unit->fuel= pvictim->fuel;
   gained_unit->foul= pvictim->foul;
   gained_unit->paradropped = pvictim->paradropped;
+  gained_unit->born_turn   = pvictim->born_turn;
 
   /* Inform owner about less than full fuel */
   send_unit_info(pplayer, gained_unit);
diff -Nurd -X.diff_ignore freeciv/server/savegame.c freeciv/server/savegame.c
--- freeciv/server/savegame.c	2007-03-05 21:09:47.0 +0200
+++ freeciv/server/savegame.c	2007-03-06 07:01:38.0 +0200
@@ -1683,6 +1683,8 @@
 punit->moves_left
   = secfile_lookup_int(file, "player%d.u%d.moves", plrno, i);
 punit->fuel = secfile_lookup_int(file, "player%d.u%d.fuel", plrno, i);
+punit->born_turn = secfile_lookup_int_default(file, game.info.turn,
+  "player%d.u%d.born", plrno, i);
 activity = secfile_lookup_int(file, "player%d.u%d.activity", plrno, i);
 if (activity == ACTIVITY_PATROL_UNUSED) {
   /* Previously ACTIVITY_PATROL and ACTIVITY_GOTO were used for
@@ -2922,6 +2924,8 @@
 		plrno, i);
 secfile_insert_int(file, punit->fuel, "player%d.u%d.fuel",
 		plrno, i);
+secfile_insert_int(file, punit->born_turn, "player%d.u%d.born",
+   plrno, i);
 secfile_insert_int(file, punit->battlegroup,
 		   "player%d.u%d.battlegroup", plrno, i);
 
___
Freeciv-dev mailing list
Freeciv-dev@gna.org
https://mail.gna.org/listinfo/freeciv-dev

[Freeciv-Dev] (PR#37627) [Patch] Remove obsolete is_air_unittype()

2007-03-05 Thread Marko Lindqvist

http://bugs.freeciv.org/Ticket/Display.html?id=37627 >

 $subject


 - ML

diff -Nurd -X.diff_ignore freeciv/common/movement.c freeciv/common/movement.c
--- freeciv/common/movement.c	2007-03-06 05:35:14.0 +0200
+++ freeciv/common/movement.c	2007-03-06 06:24:07.0 +0200
@@ -129,15 +129,6 @@
 
 
 /
-  Return TRUE iff this unit type is an air unit type (including missiles).
-/
-bool is_air_unittype(const struct unit_type *punittype)
-{
-  return (get_unit_move_type(punittype) == AIR_MOVING);
-}
-
-
-/
   Return TRUE iff this unit type is a ground/land/normal unit type.
 /
 bool is_ground_unittype(const struct unit_type *punittype)
diff -Nurd -X.diff_ignore freeciv/common/movement.h freeciv/common/movement.h
--- freeciv/common/movement.h	2007-03-06 05:35:14.0 +0200
+++ freeciv/common/movement.h	2007-03-06 06:24:17.0 +0200
@@ -26,7 +26,6 @@
 bool is_air_unit(const struct unit *punit);
 bool is_ground_unit(const struct unit *punit);
 bool is_sailing_unittype(const struct unit_type *punittype);
-bool is_air_unittype(const struct unit_type *punittype);
 bool is_ground_unittype(const struct unit_type *punittype);
 
 bool is_native_tile(const struct unit_type *punittype,
___
Freeciv-dev mailing list
Freeciv-dev@gna.org
https://mail.gna.org/listinfo/freeciv-dev


[Freeciv-Dev] (PR#37626) [Patch] unit_move_turns() & UCF_TERRAIN_SPEED

2007-03-05 Thread Marko Lindqvist

http://bugs.freeciv.org/Ticket/Display.html?id=37626 >

 This makes unit_move_turns() to respect UCF_TERRAIN_SPEED instead of
considering AIR_MOVING and HELI_MOVING to have it.


 - ML

diff -Nurd -X.diff_ignore freeciv/ai/aiunit.c freeciv/ai/aiunit.c
--- freeciv/ai/aiunit.c	2007-03-06 05:46:13.0 +0200
+++ freeciv/ai/aiunit.c	2007-03-06 06:11:32.0 +0200
@@ -260,35 +260,25 @@
 {
   int move_time;
   int move_rate = unit_move_rate(punit);
+  struct unit_class *pclass = get_unit_class(unit_type(punit));
 
-  switch (get_unit_move_type(unit_type(punit))) {
-  case LAND_MOVING:
-  
-   /* FIXME: IGTER units should have their move rates multiplied by 
-* igter_speedup. Note: actually, igter units should never have their 
-* move rates multiplied. The correct behaviour is to have every tile 
-* they cross cost 1/3 of a movement point. ---RK */
- 
+  if (!unit_class_flag(pclass, UCF_TERRAIN_SPEED)) {
+/* Unit does not care about terrain */
+move_time = real_map_distance(punit->tile, ptile) * SINGLE_MOVE / move_rate;
+  } else {
 if (unit_flag(punit, F_IGTER)) {
+  /* FIXME: IGTER units should have their move rates multiplied by 
+   * igter_speedup. Note: actually, igter units should never have their 
+   * move rates multiplied. The correct behaviour is to have every tile 
+   * they cross cost 1/3 of a movement point. ---RK */
   move_rate *= 3;
 }
-move_time = WARMAP_COST(ptile) / move_rate;
-break;
- 
-  case SEA_MOVING:
-move_time = WARMAP_SEACOST(ptile) / move_rate;
-break;
- 
-  case HELI_MOVING:
-  case AIR_MOVING:
- move_time = real_map_distance(punit->tile, ptile) 
-   * SINGLE_MOVE / move_rate;
- break;
- 
-  default:
-die("ai/aiunit.c:unit_move_turns: illegal move type %d",
-	get_unit_move_type(unit_type(punit)));
-move_time = 0;
+
+if (get_unit_move_type(unit_type(punit)) == SEA_MOVING) {
+  move_time = WARMAP_SEACOST(ptile) / move_rate;
+} else {
+  move_time = WARMAP_COST(ptile) / move_rate;
+}
   }
   return move_time;
 }
___
Freeciv-dev mailing list
Freeciv-dev@gna.org
https://mail.gna.org/listinfo/freeciv-dev


[Freeciv-Dev] (PR#37625) [Patch] count_my_units() uses unit class cache rather than move_type

2007-03-05 Thread Marko Lindqvist

http://bugs.freeciv.org/Ticket/Display.html?id=37625 >

 count_my_units() determines where units can move from cached values
instead of move_type.
 stats.units.air field is renamed as more generic(?) stats.units.amphibious.


 - ML

diff -Nurd -X.diff_ignore freeciv/ai/aicity.c freeciv/ai/aicity.c
--- freeciv/ai/aicity.c	2007-03-05 21:11:52.0 +0200
+++ freeciv/ai/aicity.c	2007-03-06 05:57:50.0 +0200
@@ -510,7 +510,7 @@
   case EFT_MOVE_BONUS:
 /* FIXME: check other reqs (e.g., unitclass) */
 v += (8 * v * amount + ai->stats.units.land
-	  + ai->stats.units.sea + ai->stats.units.air);
+	  + ai->stats.units.sea + ai->stats.units.amphibious);
 break;
   case EFT_UNIT_NO_LOSE_POP:
 v += unit_list_size(pcity->tile->units) * 2;
@@ -518,17 +518,17 @@
   case EFT_HP_REGEN:
 /* FIXME: check other reqs (e.g., unitclass) */
 v += (5 * c + ai->stats.units.land
-	  + ai->stats.units.sea + ai->stats.units.air);
+	  + ai->stats.units.sea + ai->stats.units.amphibious);
 break;
   case EFT_VETERAN_COMBAT:
 /* FIXME: check other reqs (e.g., unitclass) */
 v += (2 * c + ai->stats.units.land + ai->stats.units.sea
-	  + ai->stats.units.air);
+	  + ai->stats.units.amphibious);
 break;
   case EFT_VETERAN_BUILD:
 /* FIXME: check other reqs (e.g., unitclass, unitflag) */
 v += (3 * c + ai->stats.units.land + ai->stats.units.sea
-	  + ai->stats.units.air);
+	  + ai->stats.units.amphibious);
 break;
   case EFT_UPGRADE_UNIT:
 v += ai->stats.units.upgradeable;
diff -Nurd -X.diff_ignore freeciv/ai/aidata.c freeciv/ai/aidata.c
--- freeciv/ai/aidata.c	2007-03-05 21:11:52.0 +0200
+++ freeciv/ai/aidata.c	2007-03-06 05:54:36.0 +0200
@@ -186,20 +186,18 @@
   memset(&ai->stats.units, 0, sizeof(ai->stats.units));
 
   unit_list_iterate(pplayer->units, punit) {
-switch (get_unit_move_type(unit_type(punit))) {
-case LAND_MOVING:
+struct unit_class *pclass = get_unit_class(unit_type(punit));
+
+if (pclass->ai.land_move != MOVE_NONE
+&& pclass->ai.sea_move != MOVE_NONE) {
+  /* Can move both land and ocean */
+  ai->stats.units.amphibious++;
+} else if (pclass->ai.land_move != MOVE_NONE) {
+  /* Can move only at land */
   ai->stats.units.land++;
-  break;
-case SEA_MOVING:
+} else if (pclass->ai.sea_move != MOVE_NONE) {
+  /* Can move only at sea */
   ai->stats.units.sea++;
-  break;
-case HELI_MOVING:
-case AIR_MOVING:
-  ai->stats.units.air++;
-  break;
-default:
-  freelog(LOG_ERROR, "Illegal move type in count_my_units()!");
-  break;
 }
 
 if (unit_flag(punit, F_TRIREME)) {
diff -Nurd -X.diff_ignore freeciv/ai/aidata.h freeciv/ai/aidata.h
--- freeciv/ai/aidata.h	2007-03-05 21:11:52.0 +0200
+++ freeciv/ai/aidata.h	2007-03-06 05:56:08.0 +0200
@@ -111,8 +111,8 @@
   /* Unit-flag counts. */
   int triremes, missiles;
 
-  /* Move-type counts (air includes helicoptor here). */
-  int land, sea, air;
+  /* Move-type counts */
+  int land, sea, amphibious;
 
   /* Upgradeable units */
   int upgradeable;
___
Freeciv-dev mailing list
Freeciv-dev@gna.org
https://mail.gna.org/listinfo/freeciv-dev


Re: [Freeciv-Dev] (PR#37534) [Patch] Base gfx tags from ruleset

2007-03-05 Thread Marko Lindqvist

http://bugs.freeciv.org/Ticket/Display.html?id=37534 >

On 3/5/07, Marko Lindqvist <[EMAIL PROTECTED]> wrote:
>
>  Get base gfx tags from ruleset.

 - Necessary modifications to all rulesets and tilesets
 - If primary gfx and alt gfx consisted different layers, parts of alt
gfx appeared in addition to primary gfx. Fixed.


 - ML

diff -Nurd -X.diff_ignore freeciv/client/packhand.c freeciv/client/packhand.c
--- freeciv/client/packhand.c	2007-03-06 03:31:58.0 +0200
+++ freeciv/client/packhand.c	2007-03-06 04:53:52.0 +0200
@@ -2473,6 +2473,8 @@
 
   sz_strlcpy(pbase->name_orig, p->name);
   pbase->name = Q_(pbase->name_orig);
+  sz_strlcpy(pbase->graphic_str, p->graphic_str);
+  sz_strlcpy(pbase->graphic_alt, p->graphic_alt);
 
   for (i = 0; i < p->reqs_count; i++) {
 requirement_vector_append(&pbase->reqs, &p->reqs[i]);
@@ -2482,6 +2484,8 @@
   pbase->native_to = p->native_to;
 
   pbase->flags = p->flags;
+
+  tileset_setup_base(tileset, pbase);
 }
 
 /**
diff -Nurd -X.diff_ignore freeciv/client/tilespec.c freeciv/client/tilespec.c
--- freeciv/client/tilespec.c	2007-02-28 23:02:38.0 +0200
+++ freeciv/client/tilespec.c	2007-03-06 05:12:43.0 +0200
@@ -27,6 +27,7 @@
 #include 
 
 #include "astring.h"
+#include "base.h"
 #include "capability.h"
 #include "fcintl.h"
 #include "game.h" /* for fill_xxx */
@@ -241,9 +242,6 @@
   *irrigation[MAX_INDEX_CARDINAL],
   *pollution,
   *village,
-  *fortress,
-  *fortress_back,
-  *airbase,
   *fallout,
   *fog,
   **fullfog,
@@ -253,6 +251,12 @@
   } tx;/* terrain extra */
   struct {
 struct sprite
+  *background,
+  *middleground,
+  *foreground;
+  } bases[BASE_LAST];
+  struct {
+struct sprite
   *main[EDGE_COUNT],
   *city[EDGE_COUNT],
   *worked[EDGE_COUNT],
@@ -947,6 +951,9 @@
   government_iterate(gov) {
 tileset_setup_government(tileset, gov->index);
   } government_iterate_end;
+  base_type_iterate(pbase) {
+tileset_setup_base(tileset, pbase);
+  } base_type_iterate_end;
   for (id = 0; id < game.control.nation_count; id++) {
 tileset_setup_nation_flag(tileset, id);
   }
@@ -2259,9 +2266,6 @@
   SET_SPRITE(tx.fallout,"tx.fallout");
   SET_SPRITE(tx.pollution,  "tx.pollution");
   SET_SPRITE(tx.village,"tx.village");
-  SET_SPRITE(tx.fortress,   "tx.fortress");
-  SET_SPRITE_ALT(tx.fortress_back, "tx.fortress_back", "tx.fortress");
-  SET_SPRITE(tx.airbase,"tx.airbase");
   SET_SPRITE(tx.fog,"tx.fog");
 
   /* Load color sprites. */
@@ -2494,9 +2498,9 @@
   or else return NULL, and emit log message.
 ***/
 struct sprite* lookup_sprite_tag_alt(struct tileset *t,
-	const char *tag, const char *alt,
-	bool required, const char *what,
-	const char *name)
+ const char *tag, const char *alt,
+ bool required, const char *what,
+ const char *name)
 {
   struct sprite *sp;
   
@@ -2591,6 +2595,59 @@
 			presource->name);
 }
 
+/
+  Set base sprite values; should only happen after
+  tilespec_load_tiles().
+/
+void tileset_setup_base(struct tileset *t,
+const struct base_type *pbase)
+{
+  char full_tag_name[MAX_LEN_NAME + strlen("_fg")];
+  const int id = pbase->id;
+
+  assert(id >= 0 && id < game.control.num_base_types);
+
+  sz_strlcpy(full_tag_name, pbase->graphic_str);
+  strcat(full_tag_name, "_bg");
+  t->sprites.bases[id].background = load_sprite(t, full_tag_name);
+
+  sz_strlcpy(full_tag_name, pbase->graphic_str);
+  strcat(full_tag_name, "_mg");
+  t->sprites.bases[id].middleground = load_sprite(t, full_tag_name);
+
+  sz_strlcpy(full_tag_name, pbase->graphic_str);
+  strcat(full_tag_name, "_fg");
+  t->sprites.bases[id].foreground = load_sprite(t, full_tag_name);
+
+  if (t->sprites.bases[id].background == NULL
+  && t->sprites.bases[id].middleground == NULL
+  && t->sprites.bases[id].foreground == NULL) {
+/* No primary graphics at all. Try alternative */
+freelog(LOG_VERBOSE,
+	_("Using alternate graphic %s (instead of %s) for base %s"),
+pbase->graphic_alt, pbase->graphic_str, base_name(pbase));
+
+sz_strlcpy(full_tag_name, pbase->graphic_alt);
+strcat(full_tag_name, "_bg");
+t->sprites.bases[id].background = load_sprite(t, full_tag_name);
+
+sz_strlcpy(full_tag_name, pbase->graphic_alt);
+strcat(full_tag_name, "_mg");
+t->sprites.bases[id].middleground = load_sprite(t, full_tag_name);
+
+sz_strlcpy(full_tag_name, pbase->graphic_alt);
+strcat(full_tag_name, "_fg");
+t->sprites.bases[id].foreground = load_sp

Re: [Freeciv-Dev] (PR#37537) [Patch] Base build time

2007-03-05 Thread Marko Lindqvist

http://bugs.freeciv.org/Ticket/Display.html?id=37537 >

On 3/5/07, Marko Lindqvist <[EMAIL PROTECTED]> wrote:
>
>  This makes built time property of base type.

 - Updated against svn
 - Necessary modifications to civ1 & civ2 rulesets too


 - ML

diff -Nurd -X.diff_ignore freeciv/client/packhand.c freeciv/client/packhand.c
--- freeciv/client/packhand.c	2007-03-06 03:31:58.0 +0200
+++ freeciv/client/packhand.c	2007-03-06 03:45:35.0 +0200
@@ -2414,8 +2414,6 @@
   pterrain->transform_result = get_terrain(p->transform_result);
   pterrain->transform_time = p->transform_time;
   pterrain->rail_time = p->rail_time;
-  pterrain->airbase_time = p->airbase_time;
-  pterrain->fortress_time = p->fortress_time;
   pterrain->clean_pollution_time = p->clean_pollution_time;
   pterrain->clean_fallout_time = p->clean_fallout_time;
   
@@ -2481,6 +2479,8 @@
 
   pbase->native_to = p->native_to;
 
+  pbase->build_time = p->build_time;
+
   pbase->flags = p->flags;
 }
 
diff -Nurd -X.diff_ignore freeciv/common/base.h freeciv/common/base.h
--- freeciv/common/base.h	2007-03-06 03:31:58.0 +0200
+++ freeciv/common/base.h	2007-03-06 03:46:29.0 +0200
@@ -39,6 +39,7 @@
   char name_orig[MAX_LEN_NAME];
   int id;
   struct requirement_vector reqs;
+  int build_time;
   bv_unit_classes native_to;
 
   bv_base_flags flags;
diff -Nurd -X.diff_ignore freeciv/common/packets.def freeciv/common/packets.def
--- freeciv/common/packets.def	2007-03-06 03:31:58.0 +0200
+++ freeciv/common/packets.def	2007-03-06 03:47:22.0 +0200
@@ -1250,8 +1250,6 @@
   TERRAIN transform_result;
   UINT8 transform_time;
   UINT8 rail_time;
-  UINT8 airbase_time;
-  UINT8 fortress_time;
   UINT8 clean_pollution_time;
   UINT8 clean_fallout_time;
   
@@ -1272,6 +1270,7 @@
   STRING name[MAX_LEN_NAME];
   UINT8 reqs_count;
   REQUIREMENT reqs[MAX_NUM_REQS:reqs_count];
+  UINT8 build_time;
   BV_UNIT_CLASSES native_to;
   BV_BASE_FLAGS flags;
 end
diff -Nurd -X.diff_ignore freeciv/common/terrain.h freeciv/common/terrain.h
--- freeciv/common/terrain.h	2007-03-03 18:28:05.0 +0200
+++ freeciv/common/terrain.h	2007-03-06 03:45:35.0 +0200
@@ -144,8 +144,6 @@
   struct terrain *transform_result;
   int transform_time;
   int rail_time;
-  int airbase_time;
-  int fortress_time;
   int clean_pollution_time;
   int clean_fallout_time;
 
diff -Nurd -X.diff_ignore freeciv/common/tile.c freeciv/common/tile.c
--- freeciv/common/tile.c	2007-03-06 03:31:58.0 +0200
+++ freeciv/common/tile.c	2007-03-06 03:45:35.0 +0200
@@ -292,13 +292,13 @@
   case ACTIVITY_IRRIGATE:
 return ptile->terrain->irrigation_time * ACTIVITY_FACTOR;
   case ACTIVITY_FORTRESS:
-return ptile->terrain->fortress_time * ACTIVITY_FACTOR;
+return base_type_get_by_id(BASE_FORTRESS)->build_time * ACTIVITY_FACTOR;
   case ACTIVITY_RAILROAD:
 return ptile->terrain->rail_time * ACTIVITY_FACTOR;
   case ACTIVITY_TRANSFORM:
 return ptile->terrain->transform_time * ACTIVITY_FACTOR;
   case ACTIVITY_AIRBASE:
-return ptile->terrain->airbase_time * ACTIVITY_FACTOR;
+return base_type_get_by_id(BASE_AIRBASE)->build_time * ACTIVITY_FACTOR;
   case ACTIVITY_FALLOUT:
 return ptile->terrain->clean_fallout_time * ACTIVITY_FACTOR;
   default:
diff -Nurd -X.diff_ignore freeciv/data/civ1/terrain.ruleset freeciv/data/civ1/terrain.ruleset
--- freeciv/data/civ1/terrain.ruleset	2007-03-06 03:31:56.0 +0200
+++ freeciv/data/civ1/terrain.ruleset	2007-03-06 03:50:17.0 +0200
@@ -614,6 +614,7 @@
   "Tech", "Construction", "Player"
   "TerrainClass", "Land", "Local"
 }
+build_time  = 3
 native_to   = "Land"
 flags   = "NoAggressive", "DefenseBonus", "ClaimTerritory",
   "NoStackDeath", "DiplomatDefense"
@@ -624,5 +625,6 @@
 { "type", "name", "range"
   "Tech", "Never", "Player"
 }
+build_time  = 3
 native_to   = "Air", "Missile"
 flags   = "NoStackDeath", "DiplomatDefense", "ParadropFrom"
diff -Nurd -X.diff_ignore freeciv/data/civ2/terrain.ruleset freeciv/data/civ2/terrain.ruleset
--- freeciv/data/civ2/terrain.ruleset	2007-03-06 03:31:57.0 +0200
+++ freeciv/data/civ2/terrain.ruleset	2007-03-06 03:48:58.0 +0200
@@ -706,6 +706,7 @@
   "Tech", "Construction", "Player"
   "TerrainClass", "Land", "Local"
 }
+build_time  = 3
 native_to   = "Land"
 flags   = "NoAggressive", "DefenseBonus", "ClaimTerritory",
   "NoStackDeath", "DiplomatDefense"
@@ -717,5 +718,6 @@
   "Tech", "Radio", "Player"
   "TerrainClass", "Land", "Local"
 }
+build_time  = 3
 native_to   = "Air", "Helicopter", "Missile"
 flags   = "NoStackDeath", "DiplomatDefense", "ParadropFrom"
diff -Nurd -X.diff_ignore freeciv/data/default/terrain.ruleset freeciv/data/default/terrain.ruleset
--- freeciv/data/default/terrain.ruleset	2007-03-06 03:31:57.0 +0200
+++ freeciv/data/default/terrain.ruleset	2007-03-06 03:48:08.0 +0200
@@ -773,6 +773,7 @@
   

Re: [Freeciv-Dev] (PR#37425) [Patch] base gui_type

2007-03-05 Thread Marko Lindqvist

http://bugs.freeciv.org/Ticket/Display.html?id=37425 >

On 3/3/07, Marko Lindqvist <[EMAIL PROTECTED]> wrote:
>
>  This adds gui_type to base_type structure. This patch does not
> implement any use for it, just reading from ruleset & sending to
> client.

 - Updated against svn
 - One can call get_base_by_gui_type() with NULL unit to find any base
of the gui_type.


 - ML

diff -Nurd -X.diff_ignore freeciv/client/packhand.c freeciv/client/packhand.c
--- freeciv/client/packhand.c	2007-03-04 18:03:59.0 +0200
+++ freeciv/client/packhand.c	2007-03-06 02:43:54.0 +0200
@@ -2479,6 +2479,8 @@
   }
   assert(pbase->reqs.size == p->reqs_count);
 
+  pbase->gui_type = p->gui_type;
+
   pbase->flags = p->flags;
 }
 
diff -Nurd -X.diff_ignore freeciv/common/base.c freeciv/common/base.c
--- freeciv/common/base.c	2007-03-05 00:51:27.0 +0200
+++ freeciv/common/base.c	2007-03-06 02:46:02.0 +0200
@@ -30,6 +30,11 @@
   "AttackUnreachable", "ParadropFrom"
 };
 
+/* This must correspond to enum base_gui_type in base.h */
+static const char *base_gui_type_names[] = {
+  "Fortress", "Airbase", "Other"
+};
+
 /
   Check if base provides effect
 /
@@ -133,3 +138,38 @@
 requirement_vector_free(&pbase->reqs);
   } base_type_iterate_end;
 }
+
+/**
+  Convert base gui type names to enum; case insensitive;
+  returns BASE_GUI_LAST if can't match.
+**/
+enum base_gui_type base_gui_type_from_str(const char *s)
+{
+  enum base_gui_type i;
+  
+  assert(ARRAY_SIZE(base_gui_type_names) == BASE_GUI_LAST);
+  
+  for(i = 0; i < BASE_GUI_LAST; i++) {
+if (mystrcasecmp(base_gui_type_names[i], s)==0) {
+  return i;
+}
+  }
+  return BASE_GUI_LAST;
+}
+
+/**
+  Get best gui_type base for given parameters
+**/
+struct base_type *get_base_by_gui_type(enum base_gui_type type,
+   const struct unit *punit,
+   const struct tile *ptile)
+{
+  base_type_iterate(pbase) {
+if (type == pbase->gui_type
+&& (!punit || can_build_base(punit, pbase, ptile))) {
+  return pbase;
+}
+  } base_type_iterate_end;
+
+  return NULL;
+}
diff -Nurd -X.diff_ignore freeciv/common/base.h freeciv/common/base.h
--- freeciv/common/base.h	2007-03-05 00:51:27.0 +0200
+++ freeciv/common/base.h	2007-03-06 02:43:54.0 +0200
@@ -19,6 +19,10 @@
 
 enum base_type_id { BASE_FORTRESS = 0, BASE_AIRBASE, BASE_LAST };
 
+/* This must correspond to base_gui_type_names[] in base.c */
+enum base_gui_type { BASE_GUI_FORTRESS = 0, BASE_GUI_AIRBASE, BASE_GUI_OTHER,
+ BASE_GUI_LAST };
+
 typedef enum base_type_id Base_type_id;
 
 enum base_flag_id {
@@ -43,6 +47,7 @@
   char name_orig[MAX_LEN_NAME];
   int id;
   struct requirement_vector reqs;
+  enum base_gui_type gui_type;
   bv_base_flags flags;
 };
 
@@ -57,6 +62,11 @@
 enum base_flag_id base_flag_from_str(const char *s);
 struct base_type *base_type_get_by_id(Base_type_id id);
 
+enum base_gui_type base_gui_type_from_str(const char *s);
+struct base_type *get_base_by_gui_type(enum base_gui_type type,
+   const struct unit *punit,
+   const struct tile *ptile);
+
 void base_types_init(void);
 void base_types_free(void);
 
diff -Nurd -X.diff_ignore freeciv/common/packets.def freeciv/common/packets.def
--- freeciv/common/packets.def	2007-03-03 23:02:08.0 +0200
+++ freeciv/common/packets.def	2007-03-06 02:43:54.0 +0200
@@ -194,6 +194,8 @@
 type REQ_TYPE	= uint8(enum req_source_type)
 type REQ_RANGE		= uint8(enum req_range)
 type EFFECT_TYPE	= uint8(enum effect_type)
+type BASE_GUI   = uint8(enum base_gui_type)
+
 type BV_IMPRS		= bitvector(bv_imprs)
 type BV_UCLASS_FLAGS= bitvector(bv_unit_class_flags)
 type BV_FLAGS		= bitvector(bv_flags)
@@ -1272,6 +1274,7 @@
   STRING name[MAX_LEN_NAME];
   UINT8 reqs_count;
   REQUIREMENT reqs[MAX_NUM_REQS:reqs_count];
+  BASE_GUI gui_type;
   BV_BASE_FLAGS flags;
 end
 
diff -Nurd -X.diff_ignore freeciv/data/civ1/terrain.ruleset freeciv/data/civ1/terrain.ruleset
--- freeciv/data/civ1/terrain.ruleset	2007-03-04 22:55:01.0 +0200
+++ freeciv/data/civ1/terrain.ruleset	2007-03-06 02:43:54.0 +0200
@@ -599,6 +599,7 @@
 ; name= Name of the base type.
 ; reqs 	  = requirements to build the base (see effects.ruleset
 ;   and README.effects for help on requirements)
+; gui_type= How gui should handle this base. Fort

Re: [Freeciv-Dev] (PR#37436) [Patch] Base UnitFlag requirements

2007-03-05 Thread Marko Lindqvist

http://bugs.freeciv.org/Ticket/Display.html?id=37436 >

On 3/3/07, Marko Lindqvist <[EMAIL PROTECTED]> wrote:
>
>  Remove hardcoded unit type flag requirements for building base.
> Instead ruleset defined "UnitFlag" requirements are used.

 - Flag rename part removed from this patch.


 - ML

diff -Nurd -X.diff_ignore freeciv/client/helpdata.c freeciv/client/helpdata.c
--- freeciv/client/helpdata.c	2007-03-03 18:28:05.0 +0200
+++ freeciv/client/helpdata.c	2007-03-06 02:16:59.0 +0200
@@ -891,9 +891,6 @@
   if (unit_type_flag(utype, F_TRANSFORM)) {
 sprintf(buf + strlen(buf), _("* Can transform tiles.\n"));
   }
-  if (unit_type_flag(utype, F_AIRBASE)) {
-sprintf(buf + strlen(buf), _("* Can build airbases.\n"));
-  }
   if (is_ground_unittype(utype) && !unit_type_flag(utype, F_SETTLERS)) {
 sprintf(buf + strlen(buf),
 	_("* May fortify, granting a 50%% defensive bonus.\n"));
diff -Nurd -X.diff_ignore freeciv/common/base.c freeciv/common/base.c
--- freeciv/common/base.c	2007-03-05 00:51:27.0 +0200
+++ freeciv/common/base.c	2007-03-06 02:16:59.0 +0200
@@ -52,12 +52,6 @@
 bool can_build_base(const struct unit *punit, const struct base_type *pbase,
 const struct tile *ptile)
 {
-  if ((pbase->id == BASE_FORTRESS && !unit_flag(punit, F_SETTLERS)) ||
-  (pbase->id == BASE_AIRBASE && !unit_flag(punit, F_AIRBASE))) {
-/* This unit cannot build this kind of base */
-return FALSE;
-  }
-
   if (tile_get_city(ptile)) {
 /* Bases cannot be built inside cities */
 return FALSE;
diff -Nurd -X.diff_ignore freeciv/common/unittype.h freeciv/common/unittype.h
--- freeciv/common/unittype.h	2007-03-01 01:49:07.0 +0200
+++ freeciv/common/unittype.h	2007-03-06 02:18:13.0 +0200
@@ -80,7 +80,7 @@
   F_SPY,  /* Enhanced spy abilities */
   F_TRANSFORM,/* Can transform terrain types (Engineers) */
   F_PARATROOPERS,
-  F_AIRBASE,  /* Can build Airbases */
+  F_AIRBASE,  /* No hardcoded behavior, rulesets use for UnitFlag requirement */
   F_CITIES,   /* Can build cities */
   F_NO_LAND_ATTACK,   /* Cannot attack vs land squares (Submarine) */
   F_ADD_TO_CITY,  /* unit can add to city population */
diff -Nurd -X.diff_ignore freeciv/data/civ1/terrain.ruleset freeciv/data/civ1/terrain.ruleset
--- freeciv/data/civ1/terrain.ruleset	2007-03-04 22:55:01.0 +0200
+++ freeciv/data/civ1/terrain.ruleset	2007-03-06 02:16:59.0 +0200
@@ -617,6 +617,7 @@
 { "type", "name", "range"
   "Tech", "Construction", "Player"
   "TerrainClass", "Land", "Local"
+  "UnitFlag", "Settlers", "Local"
 }
 flags   = "NoAggressive", "DefenseBonus", "Watchtower", "ClaimTerritory",
   "NoStackDeath", "DiplomatDefense"
diff -Nurd -X.diff_ignore freeciv/data/civ2/terrain.ruleset freeciv/data/civ2/terrain.ruleset
--- freeciv/data/civ2/terrain.ruleset	2007-03-04 22:55:02.0 +0200
+++ freeciv/data/civ2/terrain.ruleset	2007-03-06 02:19:07.0 +0200
@@ -709,6 +709,7 @@
 { "type", "name", "range"
   "Tech", "Construction", "Player"
   "TerrainClass", "Land", "Local"
+  "UnitFlag", "Settlers", "Local"
 }
 flags   = "NoAggressive", "DefenseBonus", "Watchtower", "ClaimTerritory",
   "NoStackDeath", "DiplomatDefense"
@@ -719,6 +720,7 @@
 { "type", "name", "range"
   "Tech", "Radio", "Player"
   "TerrainClass", "Land", "Local"
+  "UnitFlag", "Airbase", "Local"
 }
 flags   = "NoStackDeath", "DiplomatDefense", "Refuel", "NoHPLoss",
   "AttackUnreachable", "ParadropFrom"
diff -Nurd -X.diff_ignore freeciv/data/default/terrain.ruleset freeciv/data/default/terrain.ruleset
--- freeciv/data/default/terrain.ruleset	2007-03-04 22:55:02.0 +0200
+++ freeciv/data/default/terrain.ruleset	2007-03-06 02:18:54.0 +0200
@@ -776,6 +776,7 @@
 { "type", "name", "range"
   "Tech", "Construction", "Player"
   "TerrainClass", "Land", "Local"
+  "UnitFlag", "Settlers", "Local"
 }
 flags   = "NoAggressive", "DefenseBonus", "Watchtower", "ClaimTerritory",
   "NoStackDeath", "DiplomatDefense"
@@ -786,6 +787,7 @@
 { "type", "name", "range"
   "Tech", "Radio", "Player"
   "TerrainClass", "Land", "Local"
+  "UnitFlag", "Airbase", "Local"
 }
 flags   = "NoStackDeath", "DiplomatDefense", "Refuel", "NoHPLoss",
   "AttackUnreachable", "ParadropFrom"
___
Freeciv-dev mailing list
Freeciv-dev@gna.org
https://mail.gna.org/listinfo/freeciv-dev


[Freeciv-Dev] (PR#37614) [Patch] Always claim base square for "ClaimTerritory" bases

2007-03-05 Thread Marko Lindqvist

http://bugs.freeciv.org/Ticket/Display.html?id=37614 >

 Tile was claimed when BASE_FORTRESS was finished. This patch fixes it
to correctly check for "ClaimTerritory" flag (for any base type).


 - ML

diff -Nurd -X.diff_ignore freeciv/server/unittools.c freeciv/server/unittools.c
--- freeciv/server/unittools.c	2007-03-05 21:09:47.0 +0200
+++ freeciv/server/unittools.c	2007-03-06 02:04:09.0 +0200
@@ -713,7 +713,6 @@
 if (total_activity (ptile, ACTIVITY_FORTRESS)
 	>= tile_activity_time(ACTIVITY_FORTRESS, ptile)) {
   tile_add_base(ptile, base_type_get_by_id(BASE_FORTRESS));
-  map_claim_ownership(ptile, unit_owner(punit), ptile);
   unit_activity_done = TRUE;
   new_base = TRUE;
 }
@@ -784,6 +783,11 @@
 /* watchtower becomes effective
  * FIXME: Reqs on other specials will not be updated immediately. */
 unit_list_refresh_vision(ptile->units);
+
+/* Claim base if it has "ClaimTerritory" flag */
+if (tile_has_base_flag(ptile, BF_CLAIM_TERRITORY)) {
+  map_claim_ownership(ptile, unit_owner(punit), ptile);
+}
   }
 
   if (unit_activity_done) {
___
Freeciv-dev mailing list
Freeciv-dev@gna.org
https://mail.gna.org/listinfo/freeciv-dev


[Freeciv-Dev] (PR#37611) [Patch] ACTIVITY_BASE

2007-03-05 Thread Marko Lindqvist

http://bugs.freeciv.org/Ticket/Display.html?id=37611 >

 This adds id of base being built to unit structure (activity_base).
Also new activity, ACTIVITY_BASE, is added. Old ACTIVITY_FORTRESS and
ACTIVITY_AIRBASE are reserved for savegame backward compatibility.
 This patch does not change savegame format at all.

 This version is far from ready.


 - ML



ActivityBase.diff.gz
Description: GNU Zip compressed data
___
Freeciv-dev mailing list
Freeciv-dev@gna.org
https://mail.gna.org/listinfo/freeciv-dev


[Freeciv-Dev] (PR#37603) [Patch] Cast size_t to int in report.c

2007-03-05 Thread Marko Lindqvist

http://bugs.freeciv.org/Ticket/Display.html?id=37603 >

 Avoid compiler warning by explicitly casting size_t to int.


 - ML

diff -Nurd -X.diff_ignore freeciv/server/report.c freeciv/server/report.c
--- freeciv/server/report.c	2007-03-05 21:09:47.0 +0200
+++ freeciv/server/report.c	2007-03-06 00:02:13.0 +0200
@@ -607,7 +607,7 @@
 
 cat_snprintf(outptr, out_size, " %s", text);
 cat_snprintf(outptr, out_size, "%*s",
-		 18 - get_internal_string_length(text), "");
+ 18 - (int) get_internal_string_length(text), "");
   }
 
   if (BV_ISSET(selcols, DEM_COL_RANK)) {
@@ -750,7 +750,7 @@
 
   cat_snprintf(buffer, sizeof(buffer), "%s", name);
   cat_snprintf(buffer, sizeof(buffer), "%*s",
-		   18 - get_internal_string_length(name), "");
+   18 - (int) get_internal_string_length(name), "");
   dem_line_item(buffer, sizeof(buffer), pplayer, &rowtable[i], selcols);
   sz_strlcat(buffer, "\n");
 }
___
Freeciv-dev mailing list
Freeciv-dev@gna.org
https://mail.gna.org/listinfo/freeciv-dev


Re: [Freeciv-Dev] (PR#37596) 64bit & lua & -Werror

2007-03-05 Thread Marko Lindqvist

http://bugs.freeciv.org/Ticket/Display.html?id=37596 >

On 3/5/07, Marko Lindqvist <[EMAIL PROTECTED]> wrote:
>
>  --enable-debug cannot be used at 64bit system, since:
>
> ../../../../src.patched/dependencies/lua/src/ltable.c: In function
> 'luaH_mainposition':../../../../src.patched/dependencies/lua/src/ltable.c:108:
> warning: cast from pointer to integer of different size
> ../../../../src.patched/dependencies/lua/src/ltable.c:110: warning:
> cast from pointer to integer of different size

 When I updated lua to 5.1.1, I didn't got this error while compiling lua.
 But tolua did not compile against lua-5.1.1. I even got latest
version of tolua (which version we are using? Version number is not in
any obvious place)
 I tested also lua-5.0.3, but original problem is present there.


 - ML



___
Freeciv-dev mailing list
Freeciv-dev@gna.org
https://mail.gna.org/listinfo/freeciv-dev


[Freeciv-Dev] (PR#37596) 64bit & lua & -Werror

2007-03-05 Thread Marko Lindqvist

http://bugs.freeciv.org/Ticket/Display.html?id=37596 >

 --enable-debug cannot be used at 64bit system, since:

../../../../src.patched/dependencies/lua/src/ltable.c: In function
'luaH_mainposition':../../../../src.patched/dependencies/lua/src/ltable.c:108:
warning: cast from pointer to integer of different size
../../../../src.patched/dependencies/lua/src/ltable.c:110: warning:
cast from pointer to integer of different size


 - ML



___
Freeciv-dev mailing list
Freeciv-dev@gna.org
https://mail.gna.org/listinfo/freeciv-dev


[Freeciv-Dev] (PR#37592) Project directions

2007-03-05 Thread (Eddie_Anderson)

http://bugs.freeciv.org/Ticket/Display.html?id=37592 >

Since this discussion last summer, I've been thinking some more
about what Freeciv could be.  I've reached a few tentative
conclusions.  Some of the changes are simple; some are far-reaching.

I've already done some work (on my own copy of Freeciv) to
implement some of these ideas, but it has been several months since
I last worked on it.  So I figured that I would publish these ideas
to see if anyone else was interested in them.

I'll leave out some of the details in the interest of keeping
this email as brief as possible.  If there's any interest, then I
can post the details later.  Keep in mind that most of this is still
a thought experiment at this time.

Here are the ideas:

1) Add a new victory condition to Freeciv that is based on points.

   IIRC, Freeciv offers only 3 ways to win:

 a) Conquest of all opponents

 b) Being first to Alpha Centauri

 c) Winning on points after playing to "endyear"

   b) and c) require long games.  a) can be quicker but that
   requires players to focus on combat technology while ignoring
   many other aspects of Freeciv.  That tends to make the games very
   similar to each other.

   I propose that a fourth victory condition be added to Freeciv:

 d) The first player to X points wins.


   One of the biggest advantages of this is that it makes
   Freeciv games scalable.  E.g. if you want a short game, play to
   500 points; if you want a longer game, play 2000 points; etc.

   Another potential advantage is that the AI can be programmed
   to focus on accumulating points rather than trying to engineer
   a conquest.  Presumably the AI can be programmed to compare
   numbers more effectively than it can be programmed to build and
   move units.

2) Award points for things besides WoWs and techs.

   If victory can be determined by points, then there needs to be
   more ways for you to earn points.  Here are some suggestions:

 a) Award points for firsts like "50 points for the first player
to get two size 3 cities".

There could be multiple tiers.  (E.g. size 3 cites, size 5
cities, size 8 cities, etc.)   There could also be multiple
bonuses at each tier.  E.g. There could be two bonuses for
size 3:
  .a bonus for the first civ with *one* size 3 city and
  .a separate bonus for the first civ with two size 3 cities
   - and the civ that wins one bonus on that tier is
   ineligible to win the other.

There could be similar eligibility restrictions between
tiers.  E.g. if your civ wins a bonus for being the first
with one size 3 city, then your civ is ineligible to win
the bonus for being the first civ with one size *5* city.
But you *are* eligible to win the bonus for being the first
civ with *two* size 5 cities.

 b) Award 1 point on every turn for each surplus happy citizen

E.g. a size 3 city wuth 2 happy citizens and one unhappy
citizen would earn one point per turn.  But a city with 1
happy, 1 content, and 1 unhappy does not earn any points
(at least not based on this criterion; this city might still
earn points based on other criteria).

 c) Award points on every turn to the player who has the largest
city in the game.

E.g. if only one player has a size 5 city and at least one
other player has a size 4 city, then the player with the
size 5 city earns one point per turn for that difference.
Likewise if size 3 is the largest city owned by any other
player, then the player with the size 5 city would earn 2
points per turn.

 d) others

There could be many other conditions that generate points.
Which ones are implemented depends on what incentives that
the game needs.

E.g. you could award points for most WoWs, most buildings,
most units, highest number of techs, biggest population,
absence of pollution, lowest corruption losses, and on and
on.  But some of those characteristics (e.g. most buildings)
have intrinsic benefits - e.g. awarding points for having
the most buildings may make some buildings too desirable.

   One of the benefits of awarding points for things is that it
   makes it easier to tweak game balance and AI behavior.  E.g. it
   is easier to change a point value of something from 1 point to 2
   points than it is recode the AI to build more or less Settlers,
   Frigates, Caravans, etc.


Those are the biggest changes.  I believe that they will make
Freeciv games more scalable and more tune-able.  But what's even
more important is, I hope that they will expand the number of viable
strategies for winning.

There are other changes that I would like to see.  Most are not
as critical as those above.  Some of them are trivially simple.
I'll list them here 

[Freeciv-Dev] (PR#37321) Veteran status

2007-03-05 Thread Guest

http://bugs.freeciv.org/Ticket/Display.html?id=37321 >

> [guest - Sun Mar 04 19:29:33 2007]:
> 
> > [EMAIL PROTECTED] - Sat Mar 03 22:22:13 2007]:
> > 
> 
> well i see that some of you say that the status should be dropped at 
> one stage, but i will disagree here.
> 
> assume you have a elite carvel crew, you assign them to a new galeon. 
> they are very experianced with those kind of ships. so they would 
> probably stay elite
> same with frigates->ironclads

I think that is the main inconsistency. If you are assigned a new 
technology it does not assume that you become automatically experienced 
with it. For instance, Pikemen are upgraded to Musketeers. Do you 
really believe that an elite pikeman will become immediately an elite 
musketeer? They are using quite different weapons, tactics, etc. The 
same is for other technologies, such as catapults and cannons.

People even need time and training to move from one programming 
language to another, not talking about being an expert :-)

Sincerely,
Alexander

> 
> when it comes to catipults and cannons, they both rely on aim. when 
you 
> upgrade them, the status should remain
> 
> right now if you upgrade with money, status remians. the 
> workshop "upgrades" them for free. 
> 
> so i ask u guys to make an option before u make the game for the 
> upgrading system->which one you prefer to play in
> -flamehawk96
> (aka eadle)
> 
> 


___
Freeciv-dev mailing list
Freeciv-dev@gna.org
https://mail.gna.org/listinfo/freeciv-dev