Author: cazfi
Date: Wed Aug 19 21:32:57 2015
New Revision: 29589

URL: http://svn.gna.org/viewcvs/freeciv?rev=29589&view=rev
Log:
Have save_random as scenario property, available in the editor gui, defaulting 
to FALSE.
In case of loading pre-2.6 scenario it's set to TRUE if scenario already has 
random state included. 

See bug #23793

Modified:
    trunk/client/gui-gtk-2.0/editprop.c
    trunk/client/gui-gtk-3.0/editprop.c
    trunk/client/packhand.c
    trunk/common/game.c
    trunk/common/game.h
    trunk/common/packets.def
    trunk/fc_version
    trunk/server/edithand.c
    trunk/server/savegame.c
    trunk/server/savegame2.c
    trunk/server/savegame3.c

Modified: trunk/client/gui-gtk-2.0/editprop.c
URL: 
http://svn.gna.org/viewcvs/freeciv/trunk/client/gui-gtk-2.0/editprop.c?rev=29589&r1=29588&r2=29589&view=diff
==============================================================================
--- trunk/client/gui-gtk-2.0/editprop.c (original)
+++ trunk/client/gui-gtk-2.0/editprop.c Wed Aug 19 21:32:57 2015
@@ -357,6 +357,7 @@
   OPID_GAME_SCENARIO,
   OPID_GAME_SCENARIO_NAME,
   OPID_GAME_SCENARIO_DESC,
+  OPID_GAME_SCENARIO_RANDSTATE,
   OPID_GAME_SCENARIO_PLAYERS,
   OPID_GAME_STARTPOS_NATIONS,
   OPID_GAME_PREVENT_CITIES
@@ -1793,6 +1794,9 @@
       case OPID_GAME_SCENARIO_DESC:
         pv->data.v_const_string = pgame->scenario.description;
         break;
+      case OPID_GAME_SCENARIO_RANDSTATE:
+        pv->data.v_bool = pgame->scenario.save_random;
+        break;
       case OPID_GAME_SCENARIO_PLAYERS:
         pv->data.v_bool = pgame->scenario.players;
         break;
@@ -2534,6 +2538,9 @@
         return;
       case OPID_GAME_SCENARIO_DESC:
         sz_strlcpy(packet->scenario_desc, pv->data.v_const_string);
+        return;
+      case OPID_GAME_SCENARIO_RANDSTATE:
+        packet->scenario_random = pv->data.v_bool;
         return;
       case OPID_GAME_SCENARIO_PLAYERS:
         packet->scenario_players = pv->data.v_bool;
@@ -2980,6 +2987,7 @@
   case OPID_UNIT_MOVED:
   case OPID_UNIT_DONE_MOVING:
   case OPID_GAME_SCENARIO:
+  case OPID_GAME_SCENARIO_RANDSTATE:
   case OPID_GAME_SCENARIO_PLAYERS:
   case OPID_GAME_STARTPOS_NATIONS:
   case OPID_GAME_PREVENT_CITIES:
@@ -3189,6 +3197,7 @@
   case OPID_UNIT_MOVED:
   case OPID_UNIT_DONE_MOVING:
   case OPID_GAME_SCENARIO:
+  case OPID_GAME_SCENARIO_RANDSTATE:
   case OPID_GAME_SCENARIO_PLAYERS:
   case OPID_GAME_STARTPOS_NATIONS:
   case OPID_GAME_PREVENT_CITIES:
@@ -4354,6 +4363,8 @@
     ADDPROP(OPID_GAME_SCENARIO_DESC, _("Scenario Description"),
             OPF_IN_LISTVIEW | OPF_HAS_WIDGET | OPF_EDITABLE,
             VALTYPE_STRING);
+    ADDPROP(OPID_GAME_SCENARIO_RANDSTATE, _("Save Random Number State"),
+            OPF_IN_LISTVIEW | OPF_HAS_WIDGET | OPF_EDITABLE, VALTYPE_BOOL);
     ADDPROP(OPID_GAME_SCENARIO_PLAYERS, _("Save Players"), OPF_IN_LISTVIEW
             | OPF_HAS_WIDGET | OPF_EDITABLE, VALTYPE_BOOL);
     ADDPROP(OPID_GAME_STARTPOS_NATIONS, _("Nation Start Positions"),

Modified: trunk/client/gui-gtk-3.0/editprop.c
URL: 
http://svn.gna.org/viewcvs/freeciv/trunk/client/gui-gtk-3.0/editprop.c?rev=29589&r1=29588&r2=29589&view=diff
==============================================================================
--- trunk/client/gui-gtk-3.0/editprop.c (original)
+++ trunk/client/gui-gtk-3.0/editprop.c Wed Aug 19 21:32:57 2015
@@ -357,6 +357,7 @@
   OPID_GAME_SCENARIO,
   OPID_GAME_SCENARIO_NAME,
   OPID_GAME_SCENARIO_DESC,
+  OPID_GAME_SCENARIO_RANDSTATE,
   OPID_GAME_SCENARIO_PLAYERS,
   OPID_GAME_STARTPOS_NATIONS,
   OPID_GAME_PREVENT_CITIES
@@ -1793,6 +1794,9 @@
       case OPID_GAME_SCENARIO_DESC:
         pv->data.v_const_string = pgame->scenario.description;
         break;
+      case OPID_GAME_SCENARIO_RANDSTATE:
+        pv->data.v_bool = pgame->scenario.save_random;
+        break;
       case OPID_GAME_SCENARIO_PLAYERS:
         pv->data.v_bool = pgame->scenario.players;
         break;
@@ -2534,6 +2538,9 @@
         return;
       case OPID_GAME_SCENARIO_DESC:
         sz_strlcpy(packet->scenario_desc, pv->data.v_const_string);
+        return;
+      case OPID_GAME_SCENARIO_RANDSTATE:
+        packet->scenario_random = pv->data.v_bool;
         return;
       case OPID_GAME_SCENARIO_PLAYERS:
         packet->scenario_players = pv->data.v_bool;
@@ -2993,6 +3000,7 @@
   case OPID_UNIT_MOVED:
   case OPID_UNIT_DONE_MOVING:
   case OPID_GAME_SCENARIO:
+  case OPID_GAME_SCENARIO_RANDSTATE:
   case OPID_GAME_SCENARIO_PLAYERS:
   case OPID_GAME_STARTPOS_NATIONS:
   case OPID_GAME_PREVENT_CITIES:
@@ -3204,6 +3212,7 @@
   case OPID_UNIT_MOVED:
   case OPID_UNIT_DONE_MOVING:
   case OPID_GAME_SCENARIO:
+  case OPID_GAME_SCENARIO_RANDSTATE:
   case OPID_GAME_SCENARIO_PLAYERS:
   case OPID_GAME_STARTPOS_NATIONS:
   case OPID_GAME_PREVENT_CITIES:
@@ -4378,6 +4387,8 @@
     ADDPROP(OPID_GAME_SCENARIO_DESC, _("Scenario Description"),
             OPF_IN_LISTVIEW | OPF_HAS_WIDGET | OPF_EDITABLE,
             VALTYPE_STRING);
+    ADDPROP(OPID_GAME_SCENARIO_RANDSTATE, _("Save Random Number State"),
+            OPF_IN_LISTVIEW | OPF_HAS_WIDGET | OPF_EDITABLE, VALTYPE_BOOL);
     ADDPROP(OPID_GAME_SCENARIO_PLAYERS, _("Save Players"), OPF_IN_LISTVIEW
             | OPF_HAS_WIDGET | OPF_EDITABLE, VALTYPE_BOOL);
     ADDPROP(OPID_GAME_STARTPOS_NATIONS, _("Nation Start Positions"),

Modified: trunk/client/packhand.c
URL: 
http://svn.gna.org/viewcvs/freeciv/trunk/client/packhand.c?rev=29589&r1=29588&r2=29589&view=diff
==============================================================================
--- trunk/client/packhand.c     (original)
+++ trunk/client/packhand.c     Wed Aug 19 21:32:57 2015
@@ -2868,6 +2868,7 @@
   game.scenario.players = packet->players;
   game.scenario.startpos_nations = packet->startpos_nations;
   game.scenario.prevent_new_cities = packet->prevent_new_cities;
+  game.scenario.save_random = packet->save_random;
   game.scenario.handmade = packet->handmade;
 
   editgui_notify_object_changed(OBJTYPE_GAME, 1, FALSE);

Modified: trunk/common/game.c
URL: 
http://svn.gna.org/viewcvs/freeciv/trunk/common/game.c?rev=29589&r1=29588&r2=29589&view=diff
==============================================================================
--- trunk/common/game.c (original)
+++ trunk/common/game.c Wed Aug 19 21:32:57 2015
@@ -340,6 +340,7 @@
   game.scenario.startpos_nations = FALSE;
   game.scenario.handmade = FALSE;
   game.scenario.prevent_new_cities = FALSE;
+  game.scenario.save_random = FALSE;
 
   /* Veteran system. */
   game.veteran = NULL;
@@ -410,7 +411,6 @@
     game.server.save_nturns       = GAME_DEFAULT_SAVETURNS;
     game.server.save_options.save_known = TRUE;
     game.server.save_options.save_private_map = TRUE;
-    game.server.save_options.save_random = TRUE;
     game.server.save_options.save_starts = TRUE;
     game.server.savepalace        = GAME_DEFAULT_SAVEPALACE;
     game.server.scorelog          = GAME_DEFAULT_SCORELOG;

Modified: trunk/common/game.h
URL: 
http://svn.gna.org/viewcvs/freeciv/trunk/common/game.h?rev=29589&r1=29588&r2=29589&view=diff
==============================================================================
--- trunk/common/game.h (original)
+++ trunk/common/game.h Wed Aug 19 21:32:57 2015
@@ -230,8 +230,6 @@
 
       /* used by the map editor to control game_save. */
       struct {
-        bool save_random;
-
         bool save_known; /* loading will just reveal the squares around
                           * cities and units */
         bool save_starts; /* start positions will be auto generated */

Modified: trunk/common/packets.def
URL: 
http://svn.gna.org/viewcvs/freeciv/trunk/common/packets.def?rev=29589&r1=29588&r2=29589&view=diff
==============================================================================
--- trunk/common/packets.def    (original)
+++ trunk/common/packets.def    Wed Aug 19 21:32:57 2015
@@ -1843,6 +1843,7 @@
   STRING description[MAX_LEN_PACKET];
   BOOL   players;
   BOOL   startpos_nations;
+  BOOL   save_random;
   BOOL   prevent_new_cities;
   BOOL   handmade;
   BOOL   ruleset_locked;
@@ -2095,6 +2096,7 @@
   BOOL scenario;
   STRING scenario_name[256];
   STRING scenario_desc[MAX_LEN_PACKET];
+  BOOL scenario_random;
   BOOL scenario_players;
   BOOL startpos_nations;
   BOOL prevent_new_cities;

Modified: trunk/fc_version
URL: 
http://svn.gna.org/viewcvs/freeciv/trunk/fc_version?rev=29589&r1=29588&r2=29589&view=diff
==============================================================================
--- trunk/fc_version    (original)
+++ trunk/fc_version    Wed Aug 19 21:32:57 2015
@@ -54,7 +54,7 @@
 #   - Avoid adding a new mandatory capability to the development branch for
 #     as long as possible.  We want to maintain network compatibility with
 #     the stable branch for as long as possible.
-NETWORK_CAPSTRING_MANDATORY="+Freeciv.Devel-3.0-2015.Aug.18"
+NETWORK_CAPSTRING_MANDATORY="+Freeciv.Devel-3.0-2015.Aug.19"
 NETWORK_CAPSTRING_OPTIONAL=""
 
 FREECIV_DISTRIBUTOR=""

Modified: trunk/server/edithand.c
URL: 
http://svn.gna.org/viewcvs/freeciv/trunk/server/edithand.c?rev=29589&r1=29588&r2=29589&view=diff
==============================================================================
--- trunk/server/edithand.c     (original)
+++ trunk/server/edithand.c     Wed Aug 19 21:32:57 2015
@@ -1561,6 +1561,11 @@
     changed = TRUE;
   }
 
+  if (packet->scenario_random != game.scenario.save_random) {
+    game.scenario.save_random = packet->scenario_random;
+    changed = TRUE;
+  }
+
   if (packet->scenario_players != game.scenario.players) {
     game.scenario.players = packet->scenario_players;
     changed = TRUE;

Modified: trunk/server/savegame.c
URL: 
http://svn.gna.org/viewcvs/freeciv/trunk/server/savegame.c?rev=29589&r1=29588&r2=29589&view=diff
==============================================================================
--- trunk/server/savegame.c     (original)
+++ trunk/server/savegame.c     Wed Aug 19 21:32:57 2015
@@ -3821,6 +3821,17 @@
                        "%s", secfile_error());
     fc_assert_exit_msg(secfile_lookup_int(file, &rstate.x, "random.index_X"),
                        "%s", secfile_error());
+
+    /* Since random state was previously saved, save it also when resaving.
+     *
+     * Do NOT touch this in case of regular savegame. They always have random
+     * saved, but if one starts to make scenario based on a savegame, we want
+     * default scenario settings in the beginning (default save_random = 
FALSE).
+     */
+    if (game.scenario.is_scenario) {
+      game.scenario.save_random = TRUE;
+    }
+
     for (i = 0; i < 8; i++) {
       string = secfile_lookup_str(file, "random.table%d",i);
       fc_assert(NULL != string);

Modified: trunk/server/savegame2.c
URL: 
http://svn.gna.org/viewcvs/freeciv/trunk/server/savegame2.c?rev=29589&r1=29588&r2=29589&view=diff
==============================================================================
--- trunk/server/savegame2.c    (original)
+++ trunk/server/savegame2.c    Wed Aug 19 21:32:57 2015
@@ -1503,6 +1503,20 @@
     const char *string;
     int i;
 
+    /* Since random state was previously saved, save it also when resaving.
+     * This affects only pre-2.6 scenarios where scenario.save_random
+     * is not defined.
+     * - If this is 2.6 or later scenario -> it would have saved random.save = 
TRUE
+     *   only if scenario.save_random is already TRUE
+     *
+     * Do NOT touch this in case of regular savegame. They always have 
random.save
+     * set, but if one starts to make scenario based on a savegame, we want
+     * default scenario settings in the beginning (default save_random = 
FALSE).
+     */
+    if (game.scenario.is_scenario) {
+      game.scenario.save_random = TRUE;
+    }
+
     sg_failure_ret(secfile_lookup_int(loading->file, &loading->rstate.j,
                                       "random.index_J"), "%s", 
secfile_error());
     sg_failure_ret(secfile_lookup_int(loading->file, &loading->rstate.k,
@@ -1584,6 +1598,8 @@
     } else {
       game.scenario.description[0] = '\0';
     }
+    game.scenario.save_random
+      = secfile_lookup_bool_default(loading->file, FALSE, 
"scenario.save_random");
     game.scenario.players
       = secfile_lookup_bool_default(loading->file, TRUE, "scenario.players");
     game.scenario.startpos_nations

Modified: trunk/server/savegame3.c
URL: 
http://svn.gna.org/viewcvs/freeciv/trunk/server/savegame3.c?rev=29589&r1=29588&r2=29589&view=diff
==============================================================================
--- trunk/server/savegame3.c    (original)
+++ trunk/server/savegame3.c    Wed Aug 19 21:32:57 2015
@@ -2084,7 +2084,7 @@
   /* Check status and return if not OK (sg_success != TRUE). */
   sg_check_ret();
 
-  if (fc_rand_is_init() && game.server.save_options.save_random) {
+  if (fc_rand_is_init() && (!saving->scenario || game.scenario.save_random)) {
     int i;
     RANDOM_STATE rstate = fc_rand_state();
 
@@ -2173,6 +2173,8 @@
     } else {
       game.scenario.description[0] = '\0';
     }
+    game.scenario.save_random
+      = secfile_lookup_bool_default(loading->file, FALSE, 
"scenario.save_random");
     game.scenario.players
       = secfile_lookup_bool_default(loading->file, TRUE, "scenario.players");
     game.scenario.startpos_nations
@@ -2224,6 +2226,7 @@
   secfile_insert_str(saving->file, game.scenario.name, "scenario.name");
   secfile_insert_str(saving->file, game.scenario.description,
                      "scenario.description");
+  secfile_insert_bool(saving->file, game.scenario.save_random, 
"scenario.save_random");
   secfile_insert_bool(saving->file, game.scenario.players, "scenario.players");
   secfile_insert_bool(saving->file, game.scenario.startpos_nations,
                       "scenario.startpos_nations");


_______________________________________________
Freeciv-commits mailing list
Freeciv-commits@gna.org
https://mail.gna.org/listinfo/freeciv-commits

Reply via email to