Re: [Freeciv-Dev] 2.1.5

2008-06-15 Thread Daniel Markstedt
On Sat, 07 Jun 2008 02:47:35 +0900, Marko Lindqvist [EMAIL PROTECTED]  
wrote:

 2008/6/6 Madeline Book:
 What might be nice is to release 2.1.5 so it can be used
 for the first 2.1.x longturn game (which will probably start in a week  
 or two),

  Then I suggest that we postpone 2.1.5 one week, if that's possible
 for Daniel. I should have time for looking into the gcc 4.3 problem
 early next week.


I'm planning to tag 2.1.5 in about 12 h (when I wake up in the morning.)

  ~Daniel


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


Re: [Freeciv-Dev] (PR#38372) [Bug] AI tries to trade unreachable techs

2008-06-15 Thread Marko Lindqvist

URL: http://bugs.freeciv.org/Ticket/Display.html?id=38372 

2008/6/13 Marko Lindqvist:

 2007/3/18 Marko Lindqvist:

 1: Treaty: The White Horde can't have tech Asian Architecture

  Per's patch updated for S2_2.

 Committed to TRUNK (r14758) and S2_2 (r14759).

 S2_1 will wait until 2.1.5 has been released.


 - ML



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


[Freeciv-Dev] (PR#40279) [Patch] Disabled military bases

2008-06-15 Thread Marko Lindqvist

URL: http://bugs.freeciv.org/Ticket/Display.html?id=40279 

 Current military base code requires exactly two bases defined. Civ1
ruleset should have no airbase. Currently used attempt to disable
airbase from civ1 rules does not work.

 Attached patch adds 'disabled' field to military base definitions.
Disabled bases cannot be built.


 - ML

diff -Nurd -X.diff_ignore freeciv/common/base.c freeciv/common/base.c
--- freeciv/common/base.c   2007-11-27 21:57:32.0 +0200
+++ freeciv/common/base.c   2008-06-15 15:13:25.0 +0300
@@ -108,6 +108,11 @@
 return FALSE;
   }
 
+  if (pbase-disabled) {
+/* Base type not in game */
+return FALSE;
+  }
+
   return are_reqs_active(unit_owner(punit), NULL, NULL, ptile,
  unit_type(punit), NULL, NULL, pbase-reqs,
  RPT_CERTAIN);
diff -Nurd -X.diff_ignore freeciv/common/base.h freeciv/common/base.h
--- freeciv/common/base.h   2007-08-06 16:41:57.0 +0300
+++ freeciv/common/base.h   2008-06-15 15:06:52.0 +0300
@@ -47,6 +47,7 @@
 
 struct base_type {
   Base_type_id item_number;
+  bool disabled;
   struct name_translation name;
   char graphic_str[MAX_LEN_NAME];
   char graphic_alt[MAX_LEN_NAME];
diff -Nurd -X.diff_ignore freeciv/data/civ1/terrain.ruleset 
freeciv/data/civ1/terrain.ruleset
--- freeciv/data/civ1/terrain.ruleset   2008-06-14 18:24:47.0 +0300
+++ freeciv/data/civ1/terrain.ruleset   2008-06-15 15:10:32.0 +0300
@@ -1729,6 +1729,9 @@
 ; [fortress] and [airbase].
 ;
 ; name= Name of the base type.
+; disabled= Not really in game. This field will be removed
+;   in future versions when number of
+;   bases defined is adjustable.
 ; graphic = tag specifing preferred graphic
 ; graphic_alt = tag for alternate garphic if preferred graphic is 
not 
 ;   present. Can use eg - for no alternate graphic.
@@ -1764,12 +1767,15 @@
 
 [airbase]
 name = _(Airbase)
+disabled = 1
 graphic  = base.airbase
 graphic_alt  = -
 activity_gfx = unit.airbase
 reqs =
 { type, name, range
-  Tech, Never, Player
+  Tech, Radio, Player
+  TerrainClass, Land, Local
+  UnitFlag, Airbase, Local
 }
 gui_type = Airbase
 build_time   = 3
diff -Nurd -X.diff_ignore freeciv/data/civ2/terrain.ruleset 
freeciv/data/civ2/terrain.ruleset
--- freeciv/data/civ2/terrain.ruleset   2008-06-14 18:24:47.0 +0300
+++ freeciv/data/civ2/terrain.ruleset   2008-06-15 15:11:09.0 +0300
@@ -1766,6 +1766,9 @@
 ; [fortress] and [airbase].
 ;
 ; name= Name of the base type.
+; disabled= Not really in game. This field will be removed
+;   in future versions when number of
+;   bases defined is adjustable.
 ; graphic = tag specifing preferred graphic
 ; graphic_alt = tag for alternate garphic if preferred graphic is 
not 
 ;   present. Can use eg - for no alternate graphic.
diff -Nurd -X.diff_ignore freeciv/data/default/terrain.ruleset 
freeciv/data/default/terrain.ruleset
--- freeciv/data/default/terrain.ruleset2008-06-14 18:24:47.0 
+0300
+++ freeciv/data/default/terrain.ruleset2008-06-15 15:10:41.0 
+0300
@@ -1883,6 +1883,9 @@
 ; [fortress] and [airbase].
 ;
 ; name= Name of the base type.
+; disabled= Not really in game. This field will be removed
+;   in future versions when number of
+;   bases defined is adjustable.
 ; graphic = tag specifing preferred graphic
 ; graphic_alt = tag for alternate garphic if preferred graphic is 
not 
 ;   present. Can use eg - for no alternate graphic.
diff -Nurd -X.diff_ignore freeciv/server/ruleset.c freeciv/server/ruleset.c
--- freeciv/server/ruleset.c2008-05-06 03:59:25.0 +0300
+++ freeciv/server/ruleset.c2008-06-15 15:11:47.0 +0300
@@ -1954,6 +1954,9 @@
   section = unknown;
 }
 
+pbase-disabled = secfile_lookup_bool_default(file, FALSE,
+  %s.disabled, section);
+
 sz_strlcpy(pbase-graphic_str,
secfile_lookup_str_default(file, -, %s.graphic, section));
 sz_strlcpy(pbase-graphic_alt,
___
Freeciv-dev mailing list
Freeciv-dev@gna.org
https://mail.gna.org/listinfo/freeciv-dev


[Freeciv-Dev] (PR#40280) [Patch] Renamed player_invention_is_ready

2008-06-15 Thread Marko Lindqvist

URL: http://bugs.freeciv.org/Ticket/Display.html?id=40280 

 Discussion about this started in #38372.

 Attached patch renames:

 player_invention_is_ready() - player_invention_reachable()
 TECH_REACHABLE - TECH_PREREQS
 COLOR_REQTREE_REACHABLE_GOAL - COLOR_REQTREE_PREREQS_GOAL
 COLOR_REQTREE_UNREACHABLE_GOAL - COLOR_REQTREE_UNKNOWN_GOAL
 COLOR_REQTREE_REACHABLE - COLOR_REQTREE_PREREQS
 COLOR_REQTREE_UNREACHABLE - COLOR_REQTREE_UNKNOWN

 and similar reqtree color changes for tilespec format
 and adds new reqtree color for really unreachable techs.


 - ML



PlayerInventionReachable.diff.bz2
Description: BZip2 compressed data
___
Freeciv-dev mailing list
Freeciv-dev@gna.org
https://mail.gna.org/listinfo/freeciv-dev


[Freeciv-Dev] (PR#40281) [Patch] Fix winsock compiler warning

2008-06-15 Thread Marko Lindqvist

URL: http://bugs.freeciv.org/Ticket/Display.html?id=40281 

 $subject


 - ML

diff -Nurd -X.diff_ignore freeciv/server/sernet.c freeciv/server/sernet.c
--- freeciv/server/sernet.c 2008-05-04 16:48:09.0 +0300
+++ freeciv/server/sernet.c 2008-06-15 19:43:41.0 +0300
@@ -1127,7 +1127,11 @@
 /
 static void send_lanserver_response(void)
 {
+#ifndef HAVE_WINSOCK
   unsigned char buffer[MAX_LEN_PACKET];
+#else  /* HAVE_WINSOCK */
+  char buffer[MAX_LEN_PACKET];
+#endif /* HAVE_WINSOCK */
   char hostname[512];
   char port[256];
   char version[256];
___
Freeciv-dev mailing list
Freeciv-dev@gna.org
https://mail.gna.org/listinfo/freeciv-dev


[Freeciv-Dev] (PR#40282) Re: Patch: CMA fix when loading saved game

2008-06-15 Thread Marko Lindqvist

URL: http://bugs.freeciv.org/Ticket/Display.html?id=40282 

 Forwarding to tracker so patch is not ignored and lost.

2008/6/10 Patrick Smith:
 Hi,

 The attached patch seems to fix some CMA problems when loading a saved game.
 The city report still indicates fairly random CMA choices for cities, but
 some messages about the governor being confused seem to have disappeared,
 and I can now set the governor as I wish after loading a game, which wasn't
 always possible before.

 Do you have instructions how to reliably reproduce the problem?
 It would be great if you have savegame from which this is
reproducible. Of course, due to nature of the problem, this might be
hard to get. It would require savegame which can be loaded ok, but
would, when saved and reloaded again, produce the buggy behavior.


 - ML



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


Re: [Freeciv-Dev] (PR#40282) Re: Patch: CMA fix when loading saved game

2008-06-15 Thread Marko Lindqvist

URL: http://bugs.freeciv.org/Ticket/Display.html?id=40282 

 2008/6/10 Patrick Smith:
 Hi,

 The attached patch seems to fix some CMA problems when loading a saved game.
 The city report still indicates fairly random CMA choices for cities, but
 some messages about the governor being confused seem to have disappeared,
 and I can now set the governor as I wish after loading a game, which wasn't
 always possible before.

 Your patch was a bit too hackish. For example, it handled only first
connection client made. If client reconnects to same or another
server, your fix was not used at all.
 Based on your comments about the actual problem and its reasons, I
wrote a bit different patch. It is attached to this email. Can you
test if it fixes the problems. (This version is written against TRUNK,
I don't know if it applies cleanly to other branches)


 - ML

diff -Nurd -X.diff_ignore freeciv/client/agents/cma_core.c 
freeciv/client/agents/cma_core.c
--- freeciv/client/agents/cma_core.c2008-03-10 20:08:04.0 +0200
+++ freeciv/client/agents/cma_core.c2008-06-15 20:17:12.0 +0300
@@ -48,6 +48,8 @@
 
 #include cma_core.h
 
+static bool cma_frozen;
+
 /*
  * The CMA is an agent. The CMA will subscribe itself to all city
  * events. So if a city changes the callback function city_changed is
@@ -362,6 +364,10 @@
   bool handled;
   int i, city_id = pcity-id;
 
+  if (cma_frozen) {
+return;
+  }
+
   freelog(HANDLE_CITY_LOG_LEVEL,
  handle_city(city %d=\%s\) pos=(%d,%d) owner=%s,
  pcity-id,
@@ -505,13 +511,14 @@
 ...
 */
 bool cma_apply_result(struct city *pcity,
-const struct cm_result *const result)
+  const struct cm_result *const result)
 {
   assert(!cma_is_city_under_agent(pcity, NULL));
   if (result-found_a_valid) {
 return apply_result_on_server(pcity, result);
-  } else
+  } else {
 return TRUE; /*  */
+  }
 }
 
 /
@@ -635,3 +642,25 @@
 
   attr_city_set(attr, city_id, SAVED_PARAMETER_SIZE, buffer);
 }
+
+/**
+  Freeze CMA not to act while cities have inconsistent state.
+**/
+void cma_freeze(void)
+{
+  cma_frozen = TRUE;
+}
+
+/**
+  Thaw CMA when cities reach consistent state.
+**/
+void cma_thaw(void)
+{
+  cma_frozen = FALSE;
+
+  cities_iterate(pcity) {
+if (cma_is_city_under_agent(pcity, NULL)) {
+  city_changed(pcity-id);
+}
+  } cities_iterate_end;
+}
diff -Nurd -X.diff_ignore freeciv/client/agents/cma_core.h 
freeciv/client/agents/cma_core.h
--- freeciv/client/agents/cma_core.h2007-08-04 18:38:37.0 +0300
+++ freeciv/client/agents/cma_core.h2008-06-15 20:18:20.0 +0300
@@ -37,6 +37,10 @@
  */
 void cma_init(void);
 
+/* Freeze cma for the time cities have inconsistent state */
+void cma_freeze(void);
+void cma_thaw(void);
+
 /* Change the actual city setting. */
 bool cma_apply_result(struct city *pcity,
  const struct cm_result *const result);
diff -Nurd -X.diff_ignore freeciv/client/packhand.c freeciv/client/packhand.c
--- freeciv/client/packhand.c   2008-05-13 13:26:10.0 +0300
+++ freeciv/client/packhand.c   2008-06-15 20:27:01.0 +0300
@@ -18,16 +18,19 @@
 #include assert.h
 #include string.h
 
+/* utility */
 #include capability.h
 #include capstr.h
-#include events.h
 #include fcintl.h
+#include log.h
+#include mem.h
+
+/* common */
+#include events.h
 #include game.h
 #include government.h
 #include idex.h
-#include log.h
 #include map.h
-#include mem.h
 #include nation.h
 #include packets.h
 #include player.h
@@ -38,7 +41,7 @@
 #include unitlist.h
 #include worklist.h
 
-#include agents.h
+/* client */
 #include attribute.h
 #include audio.h
 #include chatline_g.h
@@ -70,6 +73,10 @@
 #include tilespec.h
 #include wldlg_g.h
 
+/* agents */
+#include agents.h
+#include cma_core.h
+
 #include packhand.h
 
 static void city_packet_common(struct city *pcity, struct tile *pcenter,
@@ -1061,6 +1068,9 @@
 {
   freelog(LOG_DEBUG, handle_begin_turn());
 
+  /* Cities are guaranteed to be in consistent state. */
+  cma_thaw();
+
   /* probably duplicate insurance */
   update_client_state(C_S_RUNNING);
 
@@ -2433,6 +2443,9 @@
 {
   int i;
 
+  /* Cities will have inconsistent state until told otherwise */
+  cma_freeze();
+
   update_client_state(C_S_PREPARING);
 
   ruleset_data_free();
___
Freeciv-dev mailing list
Freeciv-dev@gna.org
https://mail.gna.org/listinfo/freeciv-dev


Re: [Freeciv-Dev] (PR#40280) [Patch] Renamed player_invention_is_ready

2008-06-15 Thread Marko Lindqvist

URL: http://bugs.freeciv.org/Ticket/Display.html?id=40280 

2008/6/15 Madeline Book:
 If the goal is to make the names more intuitive from the
 point of view of an English speaker, then in my opinion
 HAS_PREREQS (or maybe even HAVE to implicitly
 indicate that it is I/you/we the player that has the pre-
 requisites) would be a little clearer than just PREREQS.

 In some cases it refers to his tech, sometimes to mine. These are
used both client and server side.

 How about PREREQS_OK?

 Actually, HAS_PREREQS sounds like technology that has prereqs
defined, not one that somebody has prereqs researched for.

 As always, I very much prefer native speakers (or others speaking
fluent English) to tell me how to name things.


 - ML



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


[Freeciv-Dev] (PR#40280) [Patch] Renamed player_invention_is_ready

2008-06-15 Thread Madeline Book

URL: http://bugs.freeciv.org/Ticket/Display.html?id=40280 

 [EMAIL PROTECTED] - Sun Jun 15 14:01:02 2008]:
 
  Discussion about this started in #38372.
 
  Attached patch renames:
 
  TECH_REACHABLE - TECH_PREREQS
  COLOR_REQTREE_REACHABLE - COLOR_REQTREE_PREREQS
  COLOR_REQTREE_REACHABLE_GOAL - COLOR_REQTREE_PREREQS_GOAL

If the goal is to make the names more intuitive from the
point of view of an English speaker, then in my opinion
HAS_PREREQS (or maybe even HAVE to implicitly
indicate that it is I/you/we the player that has the pre-
requisites) would be a little clearer than just PREREQS.

Otherwise, I agree with the other changes and think they
improve the readability especially for people reading that
part of the code for the first time.


--
だからいいと思います。


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


[Freeciv-Dev] (PR#40280) [Patch] Renamed player_invention_is_ready

2008-06-15 Thread Madeline Book

URL: http://bugs.freeciv.org/Ticket/Display.html?id=40280 

 [EMAIL PROTECTED] - Sun Jun 15 19:07:47 2008]:
 
  Actually, HAS_PREREQS sounds like technology that has prereqs
 defined, not one that somebody has prereqs researched for.

Yes that ambiguity is a little annoying. :/

  How about PREREQS_OK?
 
This gave me another idea along the same lines: PREREQS_KNOWN.
It could also apply to player_invention_reachable() making it
bool player_invention_prereqs_known(player, tech).


-
面白くなっています。続きましょう!

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


Re: [Freeciv-Dev] (PR#40278) [Patch] Dangerous danger tweaking

2008-06-15 Thread Marko Lindqvist

URL: http://bugs.freeciv.org/Ticket/Display.html?id=40278 

2008/6/15 Marko Lindqvist:

  Cleanup to function providing us dangerous danger -logmessages,
 assess_danger()

  - Danger is always positive in this function. Made danger counter
 unsigned to make one more bit usable
  - Moved overflow avoidance before overflow may cause its nasty effects
  - Added comments
  - Named danger types (enum) instead of numerical constants 0-5
  - Changed Wall value assessing to consider only land-thread not ignoring 
 walls

 - Last one was bad change. Reverted
 - Fixed very unlikely division by zero crash


 - ML

diff -Nurd -X.diff_ignore freeciv/ai/advmilitary.c freeciv/ai/advmilitary.c
--- freeciv/ai/advmilitary.c	2008-02-04 08:53:36.0 +0200
+++ freeciv/ai/advmilitary.c	2008-06-16 02:54:27.0 +0300
@@ -431,7 +431,7 @@
   that can whack us, so let's build something that can defend against
   him. If danger is urgent and overwhelming, danger is 200+, if it is
   only overwhelming, set it depending on danger. If it is underwhelming,
-  set it to 100 pluss urgency.
+  set it to 100 plus urgency.
 
   This algorithm is very strange. But I created it by nesting up
   Syela's convoluted if ... else logic, and it seems to work. -- Per
@@ -473,11 +473,23 @@
   FIXME: Due to the nature of assess_distance, a city will only be 
   afraid of a boat laden with enemies if it stands on the coast (i.e.
   is directly reachable by this boat).
+
+  FIXME: CPU cycles are spent to determine all danger types, but
+  only DANGER_WALL and DANGER_LAND are ever used.
 ***/
+enum danger_type {
+  DANGER_ALL,  /* All but nuclear danger */
+  DANGER_LAND, /* Land danger that can be countered with Walls */
+  DANGER_SEA,
+  DANGER_AIR,
+  DANGER_NUKE,
+  DANGER_LAST };
+
 static unsigned int assess_danger(struct city *pcity)
 {
   int i;
-  int danger[5], defender;
+  unsigned int danger[DANGER_LAST];
+  int defender;
   struct player *pplayer = city_owner(pcity);
   bool pikemen = FALSE;
   unsigned int urgency = 0;
@@ -570,20 +582,23 @@
   vulnerability *= vulnerability; /* positive feedback */
 
   if (!igwall) {
-danger[1] += vulnerability * move_rate / MAX(dist, 1); /* walls */
+/* walls */
+danger[DANGER_LAND] += vulnerability * move_rate / MAX(dist, 1);
   } else if (is_sailing_unit(punit)) {
-danger[2] += vulnerability * move_rate / MAX(dist, 1); /* coastal */
+/* coastal */
+danger[DANGER_SEA] += vulnerability * move_rate / MAX(dist, 1);
   } else if (is_air_unit(punit)  !unit_has_type_flag(punit, F_NUCLEAR)) {
-danger[3] += vulnerability * move_rate / MAX(dist, 1); /* SAM */
+/* SAM */
+danger[DANGER_AIR] += vulnerability * move_rate / MAX(dist, 1);
   }
   if (uclass_has_flag(unit_class(punit), UCF_MISSILE)) {
 /* SDI */
-danger[4] += vulnerability * move_rate / MAX(move_rate, dist);
+danger[DANGER_NUKE] += vulnerability * move_rate / MAX(move_rate, dist);
   }
   if (!unit_has_type_flag(punit, F_NUCLEAR)) {
 /* only SDI helps against NUCLEAR */
 vulnerability = dangerfunct(vulnerability, move_rate, dist);
-danger[0] += vulnerability;
+danger[DANGER_ALL] += vulnerability;
 if (igwall) {
   igwall_threat += vulnerability;
 }
@@ -591,23 +606,27 @@
 } unit_list_iterate_end;
   } players_iterate_end;
 
-  if (igwall_threat == 0) {
-pcity-ai.wallvalue = 90;
-  } else {
-pcity-ai.wallvalue = (danger[0] * 9 - igwall_threat * 8) 
-   * 10 / (danger[0]);
-  }
-
   /* Watch out for integer overflows */
-  for (i = 0; i  5; i++) {
-if (danger[i]  0 || danger[i]  124) {
+  for (i = 0; i  DANGER_LAST; i++) {
+if (danger[i]  0 || danger[i]  1  25) {
   /* I hope never to see this! */
   freelog(LOG_ERROR, Dangerous danger[%d] (%d) in %s.  Beware of 
   overflow., i, danger[i], city_name(pcity));
-  danger[i] = danger[i]2; /* reduce danger of overflow */
+  danger[i] = danger[i]  2; /* reduce probability of overflow */
 }
   }
 
+  if (igwall_threat == 0) {
+pcity-ai.wallvalue = 90;
+  } else if (danger[DANGER_ALL]) {
+pcity-ai.wallvalue = (danger[DANGER_ALL] * 9 - igwall_threat * 8) 
+   * 10 / (danger[DANGER_ALL]);
+  } else {
+/* No danger.
+ * This is half of the wallvalue of what danger 1 would produce. */
+pcity-ai.wallvalue = 5;
+  }
+ 
   if (pcity-ai.grave_danger != 0) {
 /* really, REALLY urgent to defend */
 urgency += 10;
@@ -615,20 +634,22 @@
 
   /* HACK: This needs changing if multiple improvements provide
* this effect. */
+  /* FIXME: Check attacker type and protect against that. Now
+   * always assess land danger and builds any defend bonus as result. */
   defender = ai_find_source_building(pplayer, EFT_DEFEND_BONUS);
 
   if 

[Freeciv-Dev] (PR#40285) [Patch] log_set_callback() returns old callback

2008-06-15 Thread Marko Lindqvist

URL: http://bugs.freeciv.org/Ticket/Display.html?id=40285 

 $subject

 Minor change to make it easier to add extra debug functionality; to
chain log callbacks.

 My public server uses this to attach handler to store backtraces
about all LOG_FATAL and LOG_ERROR messages.


 - ML

diff -Nurd -X.diff_ignore freeciv/utility/log.c freeciv/utility/log.c
--- freeciv/utility/log.c	2007-11-28 02:28:14.0 +0200
+++ freeciv/utility/log.c	2008-05-08 15:18:56.0 +0300
@@ -203,9 +203,13 @@
 /**
 Adjust the callback function after initial log_init().
 **/
-void log_set_callback(log_callback_fn callback)
+log_callback_fn log_set_callback(log_callback_fn callback)
 {
-  log_callback=callback;
+  log_callback_fn old = log_callback;
+
+  log_callback = callback;
+
+  return old;
 }
 
 /**
diff -Nurd -X.diff_ignore freeciv/utility/log.h freeciv/utility/log.h
--- freeciv/utility/log.h	2007-03-05 19:13:42.0 +0200
+++ freeciv/utility/log.h	2008-05-08 15:19:11.0 +0300
@@ -55,7 +55,7 @@
 void log_init(const char *filename, int initial_level,
 	  log_callback_fn callback);
 void log_set_level(int level);
-void log_set_callback(log_callback_fn callback);
+log_callback_fn log_set_callback(log_callback_fn callback);
 
 void real_freelog(int level, const char *message, ...)
   fc__attribute((__format__ (__printf__, 2, 3)));
___
Freeciv-dev mailing list
Freeciv-dev@gna.org
https://mail.gna.org/listinfo/freeciv-dev


Re: [Freeciv-Dev] (PR#40280) [Patch] Renamed player_invention_is_ready

2008-06-15 Thread Marko Lindqvist

URL: http://bugs.freeciv.org/Ticket/Display.html?id=40280 

2008/6/15 Madeline Book:

 This gave me another idea along the same lines: PREREQS_KNOWN.

 I were worried this would turn out too long, but in the end I'm quite
happy with it. In addition to this change, I moved word GOAL before
modifier PREREQS_KNOWN or UNKNOWN in reqtree parts.

 It could also apply to player_invention_reachable() making it
 bool player_invention_prereqs_known(player, tech).

 There 'reachable' = 'ever reachable'.


 - ML



PlayerInventionReachable_40280-2.diff.bz2
Description: BZip2 compressed data
___
Freeciv-dev mailing list
Freeciv-dev@gna.org
https://mail.gna.org/listinfo/freeciv-dev


Re: [Freeciv-Dev] (PR#40234) [Patch] Start button sensitivity

2008-06-15 Thread Marko Lindqvist

URL: http://bugs.freeciv.org/Ticket/Display.html?id=40234 

2008/5/8 Marko Lindqvist:

 2008/5/8 Madeline Book:

   [cazfi - Wed May 07 21:59:32 2008]:
  
GTK-2
  
Current Start button sensitivity checks against global observer, but
   observer attached to player cannot start game either.

  The start button should also not be sensitive for detached
  connections (not observer and not attached to a player).

  Fixed that one.

  I also found out that Pick Nation is sometimes used to create new
 player (without nations selection) and sometimes to select nation for
 existing player. Now button text changes accordingly.
  Sensitivity of the Take Player/Pick Nation adjusted fixing two bugs:
  - Pick Nation is not sensitive for observers.* (S2_1 only, as in
 S2_2 and TRUNK observer seems to have full control over nation
 selection...)
  - Take Player is always available for detached connections

 - Updated S2_2/TRUNK version that uses new client_has_player() -function.


 - ML

diff -Nurd -X.diff_ignore freeciv/client/civclient.c freeciv/client/civclient.c
--- freeciv/client/civclient.c	2008-06-16 01:02:16.0 +0300
+++ freeciv/client/civclient.c	2008-06-16 04:49:56.0 +0300
@@ -741,14 +741,22 @@
 }
 
 /**
-  Returns TRUE if the client can issue orders (such as giving unit
+  Returns TRUE iff the client can control player.
+**/
+bool can_client_control(void)
+{
+  return (NULL != client.conn.playing
+	   !client_is_observer());
+}
+
+/**
+  Returns TRUE iff the client can issue orders (such as giving unit
   commands).  This function should be called each time before allowing the
   user to give an order.
 **/
 bool can_client_issue_orders(void)
 {
-  return (NULL != client.conn.playing
-	   !client_is_observer()
+  return (can_client_control()
 	   C_S_RUNNING == client_state());
 }
 
diff -Nurd -X.diff_ignore freeciv/client/civclient.h freeciv/client/civclient.h
--- freeciv/client/civclient.h	2008-06-16 01:02:16.0 +0300
+++ freeciv/client/civclient.h	2008-06-16 04:49:56.0 +0300
@@ -81,6 +81,7 @@
 void set_seconds_to_turndone(double seconds);
 int get_seconds_to_turndone(void);
 double real_timer_callback(void);
+bool can_client_control(void);
 bool can_client_issue_orders(void);
 bool can_client_change_view(void);
 bool can_meet_with_player(const struct player *pplayer);
diff -Nurd -X.diff_ignore freeciv/client/gui-gtk-2.0/gui_main.c freeciv/client/gui-gtk-2.0/gui_main.c
--- freeciv/client/gui-gtk-2.0/gui_main.c	2008-06-16 01:02:16.0 +0300
+++ freeciv/client/gui-gtk-2.0/gui_main.c	2008-06-16 04:51:35.0 +0300
@@ -1586,14 +1586,25 @@
   } else {
 gtk_stockbutton_set_label(ready_button, _(_Start));
   }
-  gtk_widget_set_sensitive(ready_button, (NULL != client.conn.playing));
 
-  gtk_stockbutton_set_label(nation_button, _(Pick _Nation));
-  if (NULL == client.conn.playing) {
+  /* Sensitive only if client can control player */
+  gtk_widget_set_sensitive(ready_button, can_client_control());
+
+  if (!client_has_player()) {
+/* Nation button will attach to player */
+gtk_stockbutton_set_label(nation_button, _(_Take Player));
+gtk_widget_set_sensitive(nation_button, TRUE);
+  } else {
+/* Nation button will go to Nation selection */
+gtk_stockbutton_set_label(nation_button, _(Pick _Nation));
+
+/* Sensitive iff client can select nation.
+ * FIXME: Observer can always select nations? */
 gtk_widget_set_sensitive(nation_button, game.info.is_new_game);
+ /*  can_client_control()); */
   }
 
-  if (NULL != client.conn.playing || !client.conn.observer) {
+  if (!client_is_observer()) {
 gtk_stockbutton_set_label(take_button, _(_Observe));
   } else {
 gtk_stockbutton_set_label(take_button, _(Do not _observe));
___
Freeciv-dev mailing list
Freeciv-dev@gna.org
https://mail.gna.org/listinfo/freeciv-dev


Re: [Freeciv-Dev] (PR#40254) [PATCH] Cancel AI mode when attaching to aifill player.

2008-06-15 Thread Marko Lindqvist

URL: http://bugs.freeciv.org/Ticket/Display.html?id=40254 

2008/6/5 Marko Lindqvist:
 2008/5/30 Madeline Book:

 When a user connected to a server with some
 AI players created by aifill, they were attached
 to an existing AI player but AI mode was not
 reset. So when the game started the player's
 units moved on their own. This patch fixes that
 problem by cancelling AI mode in the attached
 player if AI mode is on and the server is in
 the pregame state.

  I looked this problem too when I were working with the connectdialog
 problems (still unsure what to do with the remaining patch I have)

 Now I can post it here. This requires send_chat_printf() patch from #40284.


 - ML

diff -Nurd -X.diff_ignore freeciv/client/gui-gtk-2.0/pages.c freeciv/client/gui-gtk-2.0/pages.c
--- freeciv/client/gui-gtk-2.0/pages.c	2008-06-16 05:00:22.0 +0300
+++ freeciv/client/gui-gtk-2.0/pages.c	2008-06-16 05:00:35.0 +0300
@@ -1000,14 +1000,23 @@
 static void take_callback(GtkWidget *w, gpointer data)
 {
   if (NULL != client.conn.playing) {
-if (!client.conn.playing-ai.control) {
-  /* Make sure player reverts to AI control. This is much more neat,
-   * and hides the ugly double username in the name list because
-   * the player username equals the connection username. */
-  send_chat_printf(/aitoggle \%s\, player_name(client.conn.playing));
+const char *name = player_name(client.conn.playing);
+  
+if (client_is_observer()) {
+  if (client.conn.playing-ai.control) {
+send_chat_printf(/aitoggle \%s\, name);
+  }
+  send_chat_printf(/take \%s\, name);
+} else {
+  if (!client.conn.playing-ai.control) {
+/* Make sure player reverts to AI control. This is much more neat,
+ * and hides the ugly double username in the name list because
+ * the player username equals the connection username. */
+send_chat_printf(/aitoggle \%s\, name);
+  }
+  send_chat(/detach);
+  send_chat(/observe);
 }
-send_chat(/detach);
-send_chat(/observe);
   } else if (!client.conn.observer) {
 send_chat(/observe);
   } else {
___
Freeciv-dev mailing list
Freeciv-dev@gna.org
https://mail.gna.org/listinfo/freeciv-dev


[Freeciv-Dev] (PR#40283) [Patch] Skip base specials in tile_special_type_iterate

2008-06-15 Thread Madeline Book

URL: http://bugs.freeciv.org/Ticket/Display.html?id=40283 

 [EMAIL PROTECTED] - Sun Jun 15 23:02:28 2008]:
 
 2008/6/16 Madeline Book:
  I have also written the code with the future feature
  of more than one base type being allowed per tile in
  mind. This should be possible (since indeed it was
  allowed to have a fortress and an airbase on the same
  tile before), but I will start a new ticket for this
  issue later.
 
  You mean that since they have been stored as separate bits (and not
 as id number), it would have been possible to have them independently
 in same tile. I don't think it has ever been really possible for
 player. Fortress and airbase have replaced each other. I think this is
 correct behavior. Do you have some good use-case where multiple bases
 should exist in same tile?

In warserver (i.e. 2.0) games it sometimes happens that a city on
one island is 11 tiles (real distance) from a city on another island
and there is only one tile beside the first city that is 10 tiles
away from the second city. Now the player would like the send
fighters between the two cities (either to attack or to transfer
them somewhere) or paradrop, both of which are limited to 10 tiles
away. The usual trick in that case is to build a fortress+airbase
on the tile that is 10 tiles away and have some defenders protect
the fighters there. This is much faster and safer than say using
some transport+engineers to terraform ocean into land and build a
city 9 tiles away.

It doesn't happen often, but it does happen.

Anyway I'm sure many players would cry if they found out that
suddenly you are not allowed to build a fortress and an airbase
on the same tile. ;)

  Note that even with just one base/tile main reason I have not pushed
 gen-base code in faster is memory and disk space (savegame) usage.
 There will be player num (FoW, what players believe)) + 1 (truth) base
 maps. If you allow multiple bases in the same tile, you need one
 bit/tile/basetype. With just one base/tile you can have
 2^(bits/tile)-1 base types. I even consider adding just one more
 base type in next version by using those specials bits we have
 been using until now.

Let's assume there can be a maximum of 8 base types. Taking the
worst possible case of a 256x256 tile map with 32 players in it
means we have 33 maps of 65536 tiles or 2162688 tiles total for
the server to keep track of (or to be stored in the savegame).

Now if we allowed multiple base types on the same tile we need
a byte (8 bits) per tile to keep track of which bases are on
a tile, giving 2162688 total bytes used to keep track of this
information. If we allow only one base type per tile at a time,
then we need 3 bits per tile (lg(8)), or 811008 bytes total.

So in the worst possible case for our 8 base types of which
only one type can exist at a tile at a time, the server saves
not more than one and a half megabytes of memory. I would
think that this would be a very small portion compared to its
total memory use (which, for example in the worst case above,
would probably be a few 100 megabytes).

As for savegames, the saving would probably be a bit more
considering that the data is saved in a human editable format.
But I assume a server would also have much more disk space
(at least compared to RAM) and that the savegames would be
compressed. So the saving is not that useful in the first
place.

Therefore, in my opinion, the advantages due to space savings
and the configurability of base types does not out-weigh the
disadvantage of losing a gameplay ability (which from the
vast majority of users' points of view would look like it
was removed for no obvious reason).

But there is a somewhat deeper problem that I have noticed
now; if we were to decide that multiple base types were
allowed to exist on a tile at the same time, then something
would need to be done about S_PILLAGE_BASE and related
code. We would need a new mechanism to encode the activity
target in the pillage activity both as entered in the client
and handled at the server. :(

Finally, for far, far future considerations, if ever specials
are generalized to be fully loaded from rulesets, I assume
that military bases could be merged into this ruleset type.
Then since most special types can coexist on a tile, we
would once again have multiple base types allowed on a tile
at the same time.


--
ちょっと長くなりましたね。

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


Re: [Freeciv-Dev] (PR#40167) Client crash on scenario load

2008-06-15 Thread Marko Lindqvist

URL: http://bugs.freeciv.org/Ticket/Display.html?id=40167 

2008/3/29 Marko Lindqvist:

 On 24/03/2008, Marko Lindqvist wrote:

   With #40166 fixing server crash, scenario load now ends to client
  crash.

  Actually, this is not limited to scenario load. Same happens quite
 often for any savegame load. (scenario load crashes always, otherwise
 I don't know exact limitations to reproducibility) Loading savegame
 via commandline parameter -f - or otherwise before client connects -
 might be required for crash to happen.

 After long debugging sessions I found out reason for guaranteed scenario crash.

 Scenario games miss thawing of tile send, meaning that no tiles is
ever (not even for another game) sent from server after scenario load.


 Fix attached.


 - ML

diff -Nurd -X.diff_ignore freeciv/server/savegame.c freeciv/server/savegame.c
--- freeciv/server/savegame.c	2008-06-11 00:33:46.0 +0300
+++ freeciv/server/savegame.c	2008-06-16 07:23:50.0 +0300
@@ -223,6 +223,8 @@
 static void set_savegame_special(bv_special *specials,
 		char ch, const enum tile_special_type *index);
 
+static void game_load_internal(struct section_file *file);
+
 /***
 This returns an ascii hex value of the given half-byte of the binary
 integer. See ascii_hex2bin().
@@ -3746,6 +3748,20 @@
 ***/
 void game_load(struct section_file *file)
 {
+  bool was_send_city_suppressed = send_city_suppression(TRUE);
+  bool was_send_tile_suppressed = send_tile_suppression(TRUE);
+
+  game_load_internal(file);
+
+  send_tile_suppression(was_send_tile_suppressed);
+  send_city_suppression(was_send_city_suppressed);
+}
+
+/***
+  Real game_load function.
+***/
+static void game_load_internal(struct section_file *file)
+{
   int i, k;
   enum server_states tmp_server_state;
   RANDOM_STATE rstate;
@@ -3753,8 +3769,6 @@
   int improvement_order_size = 0;
   int technology_order_size = 0;
   int civstyle = 0;
-  bool was_send_city_suppressed = send_city_suppression(TRUE);
-  bool was_send_tile_suppressed = send_tile_suppression(TRUE);
   char **improvement_order = NULL;
   char **technology_order = NULL;
   enum tile_special_type *special_order = NULL;
@@ -4437,9 +4451,6 @@
   if (!game.info.is_new_game) {
 set_myrand_state(rstate);
   }
-
-  send_tile_suppression(was_send_tile_suppressed);
-  send_city_suppression(was_send_city_suppressed);
 }
 
 /***
___
Freeciv-dev mailing list
Freeciv-dev@gna.org
https://mail.gna.org/listinfo/freeciv-dev