On 01/26/2014 12:24 AM, Tom - Roundup wrote:
> New submission from Tom <email@example.com>:
> Currently (0.15-968-g7b322d2), when you try to load a savegame with a different
> / incompatible savestruct, you get a notice that this savegame may be
> incompatible, confirm this notice (there is no other option) and the game
> freezes, requiring a SIGKILL (i.e. bad luck if you're running full screen, no
> tabbing out, no switching to text console, only ssh / serial in or magic sysrq-k
> may help).
The game does actually not freeze. But a notification is displayed for
each incompatible data. Since we load many datastructures, you actually
have to "click" many times... What has to be done is to avoid to display
the same notification several times !
> To prevent running into this problem, read all savegames' version string when
> the savegame menu is initialized, and grey out all the entries which may be
> incompatible. Add a friendly message saying which game version this savegame
> works with and why it cannot be used with the game version currently running.
That is not as easy.
Usually, there is no savegame compatibility between "official" releases.
Greying out incompatible savegames could work, in that case.
But, we also have to handle as smartly as possible the development
phase. A datastructure change introduced by a commit does not mean that
you cannot load an 'old' savegame.
For instance, a new attribute could have been added that will be
initialized with a default value if not found in the savegame.
Then we can load the old savegame without any issue.
But we could also have change an attribute's type, for instance, or
even have change the meaning of an attribute (and thus the way we
interpret its value). In such a case, loading an old savegame could
possibly crash the game.
> This would be a lot more user friendly (you just don't want to have users run
> into this situation where the game freezes in the first place).
> The could be a hidden / command line / configuration file / build option to
> allow overriding this behavior still allowing to try and load these savegames.
I would rather propose to have 2 "coded" behaviors:
- official releases do not load old savegames
- development versions try to load old savegames (with a fix the avoid