From fc6bb36ee41413c8fc6f6dcd329b90b39f17e5fe Mon Sep 17 00:00:00 2001 From: Enno Rehling Date: Sun, 24 Mar 2019 21:27:43 +0100 Subject: [PATCH] BUG 2566 mountains with no low-level resources. NB: new data version --- src/kernel/gamedata.h | 3 ++- src/kernel/save.c | 26 ++++++++++++++++++++++++++ 2 files changed, 28 insertions(+), 1 deletion(-) diff --git a/src/kernel/gamedata.h b/src/kernel/gamedata.h index e14c0a551..986b13d1d 100644 --- a/src/kernel/gamedata.h +++ b/src/kernel/gamedata.h @@ -41,8 +41,9 @@ #define CRYPT_VERSION 363 /* passwords are encrypted */ #define FAMILIAR_FIXMAGE_VERSION 364 /* familiar links are fixed */ #define FAMILIAR_FIXSPELLBOOK_VERSION 365 /* familiar spells are fixed */ +#define FIX_STARTLEVEL_VERSION 366 /* fixing resource startlevels */ -#define RELEASE_VERSION FAMILIAR_FIXSPELLBOOK_VERSION /* current datafile */ +#define RELEASE_VERSION FIX_STARTLEVEL_VERSION /* current datafile */ #define MIN_VERSION UIDHASH_VERSION /* minimal datafile we support */ #define MAX_VERSION RELEASE_VERSION /* change this if we can need to read the future datafile, and we can do so */ diff --git a/src/kernel/save.c b/src/kernel/save.c index 45da22a7c..0b3ade593 100644 --- a/src/kernel/save.c +++ b/src/kernel/save.c @@ -613,6 +613,27 @@ static void read_regioninfo(gamedata *data, const region *r, char *info, size_t } } +static void fix_baselevel(region *r) { + struct terrain_production *p; + for (p = r->terrain->production; p->type; ++p) { + char *end; + long start = (int)strtol(p->startlevel, &end, 10); + if (*end == '\0') { + rawmaterial *res; + for (res = r->resources; res; res = res->next) { + if (p->type == res->rtype) { + if (start != res->startlevel) { + log_debug("setting resource start level for %s in %s to %d", + res->rtype->_name, regionname(r, NULL), start); + res->startlevel = start; + } + } + } + } + + } +} + static region *readregion(gamedata *data, int x, int y) { region *r; @@ -781,6 +802,11 @@ static region *readregion(gamedata *data, int x, int y) } } read_attribs(data, &r->attribs, r); + + if (r->resources && data->version < FIX_STARTLEVEL_VERSION) { + /* we had some badly made rawmaterials before this */ + fix_baselevel(r); + } return r; }