Removed the savefile minor versions which were introducded in 0.5, since bumping the major version from 5 to 6 breaks compatibility with 0.5 savefiles. Renumbered the 0.6 minor versions to start with 0.
This contains a hack to maintain compatibility with 0.6 savefiles before the renumbering, a hack which should be removed before 0.6 is released.
ESDNBDSWZ7YAH2EEUW5ASOT4WEJTXRISLQYBOHR4UMLSM6R67NJAC
KI5WMBRHOEWSCFLXPAZANEJ7BP34KVCMMBRRMF6MWZVJIWRX23UQC
JROZ5XCAQKPXFV242IO3OACFTD6KC4SNSWIXPI5WO4FQ5APRLC4QC
AM7QPHDAWNXHLUEVUHVRHG2RO2DOIEFFU4GV3DCIROW6O5HW7H4AC
LH4OYDEWEON5QNUCM74R7MNBJDP7O4XRETY74ZMYSXUXYQV427PAC
K2CS6TCX2NDVL2ASEHGP4J4K4IJ6FP3ANNKTSIWVG43HPYSBX6ZQC
X7MFMKQTNZ2IWBFVGS6WQV7NRNKJ3DWQAW2X7IQMFQQXW24AHPZQC
KSFNXBKBU4XJLJMHLVG73ZFW5CGN2D7UN32OUFHCXMHFOWF7C6TAC
Y6NBWVBEELJTKBFGKXUE4WIJP4TMJ65YMF5TWWRB5CHYEFZ26GKAC
Y63M7UHAPS6PCUAZUHJE7NV754O5YHPIJE7L6X6C7VLPFWDJWT6QC
ZL4S2AICGMIH5DCHUXH6GJHSGELIONW6DOMFWB5PE62BVS7QZZEAC
DCZMEKDHQWSQCQYQD6ZXB3XOMWLVLPSPVSBVVMPXMSZF7GO3BVCAC
Q4AG4UGLKBPH5KGVHHUPSTXQDLKDOBLQYYHYDJNNOJDZG3Y3PWXQC
GQQ6ASWTYODIHG7X32JNUUHP5NMOVZJIHWGS3F3MKRYZGAHP6NVQC
XDACRDVLDEUFUBN4L7ES5WBD3YSLBHMRZ4Q5PXIUMOK44D3TLWSAC
4OKEEU32EGHIDAJ75GH3USSQHQPZBDZVC7TOP7ALMHZRUFPE5WEQC
KDK4YJQS4P7HRB334SZ3EFCW27AEGRPE3PXW6S6TKRIG6HLOKQNAC
36BFWYZWCQGMAMK4EF2R5C66RA2EBLTX3MJW3QDEKN64C3BJQX7AC
NCYUW5C4IA6JQMFGJQUZNB2GBLKG6ROI7I3ZKO5O5DIQSQNXLNDAC
BMKL2AB2HBBBVAHWDYXPYZHSCO345QWOQHFSICFRN5BCYZ3UEK3AC
PSCYVKJ7DGXAL3V5U4O6AJTRV6Q3N3SHQWAZ73VIPRTE4W64F2XAC
T7CUIVICB74342RA32BR37T36FOX4RBSQIB5PNOHTGTGUYGDKSTQC
U6OTXM3JN7SGPVIGQ5F6NR2I7J5V7KOWFQ7AVNNRQQDNLBEDMYFQC
FS4MVTH4EEEECLEAO2FTNK5CLF2PHFYO2JZHC2YEOKYLWXRDRU6AC
JGKYRZ34S3I23PMJX6IUBR7EHEFD6I4XXEGXNT7GKT2M2VIRBSMQC
7KWDC7XFNMBLSUO2HISIROBINZBX5T67LJEEXTAORXW2YZ7VWFGAC
M7WTOF3BVX5MGA7AQZB22YEFWCSL7RLW54PQM3MTRLCKUCUZZEUAC
TLO257LZSB6ZO36STDUEWJBO2LETXFKTFGXELA6Y4BZBVAEIIINAC
CI2RMLJLIAZMEGNN6LJN6PSHXHLPG7PXFIDYRGFPVMDPJ2R4S4NQC
ZWFOOUUA5VCYOXGAHE76DXW65ME4AH2DVN6JVNGZAKTHZNDTVOJAC
FVT2J6IVMSQZYKQGUHQVGT4ADYM7AWUQ4U7766GBRRFMSR2WBMLAC
UKN6HTZXDUUOWKNWNKWPHKGUGL474JIAQN5JU3DM3DU26WGMNP4AC
IHV7JHD4E67NEGLZEO3FPQGJPJF3IAV6QV5A63FPG4SU2VRFV47QC
WQLOHSNCA3VOMDJF6IINJYKSYVYZEBPJJWBB33QSNE4RP5HEXPMAC
P5TRGRH7XMQSPCZKM5IEEO34TY6WMLGHHX7BU6Y453JFRXLUR2VQC
EMOBSWJHHB4V6WVMZL7JCF2V3KZN454Z6NS346OKFPMBNO24EJDQC
RPOZZWKG5GLPHVZZ7ZKMKS64ZMV2LDCQSARBJFJ6FZOTOKCQO7FAC
GPEJOT73KMACP33IPAKFR5ROGHCOIP22VXZMQNYTGLEA2OSZUM2AC
SDLKLUNFGVKDS55DDJZCBAVIB7NL3RRYPTACAY65SCUQKV6APFSAC
7AMQN7MITMXBNVDAK5VOXTQ4TZIAOD6ZLOFJG7GQMBTY23Y2BKSAC
L4RYVF46EQKMVOEADGRG4WMPVTQ6NNFGYMU4SHAH6XJIKWVHT77QC
GQL5SIGBHLU3FMCE54XVGLRY5AZHRM6DUEB722REA2DPLGJSN6EQC
C55G5JGGSVWMU7XVEJL6YZZLDXQZGRN7JQOAALS6WIKFPX3L2U6QC
52J7CYVAW3QCUEWA5OKWPDGOP6JZR5NJSE3JDLZFBCR7B6LH5ASAC
XYBPIU6AQ77EID4VNOMI7KQZULZI4VBZHHIGBRYO7QRJVCODEKYAC
TAG_MINOR_PIETY = 2, // Added piety_hysteresis
TAG_MINOR_QUIVER = 3, // Added quiver
TAG_MINOR_MAPMARK = 4, // Added sizes to map markers
TAG_MINOR_MONNAM = 5, // Monsters get individual names
TAG_MINOR_MONBASE = 6, // Zombie base monster gets its own field.
TAG_MINOR_FPICKUP = 7, // Added pickup option for allied monsters.
TAG_MINOR_MPATROL = 8, // Added monster patrol points.
TAG_MINOR_PATHFIND = 9, // Added monster pathfinding.
TAG_MINOR_TRTARGET = 10, // Added travel target.
TAG_MINOR_LUADGN = 11, // Allow dungeon Lua to persist data.
// Bump version past 12.
TAG_MINOR_SVNREV = 13, // Added SVN revision
TAG_MINOR_PORTEXT = 14, // Keep track of portal vault extensions.
TAG_MINOR_RELIGION = 15, // Keep track of ghosts' religions.
// XXX: Release 0.5 -> switch to major version 6
// Does that mean we can remove all the above minor version checks?
TAG_MINOR_ARTEFACT = 16, // Turned fixed arts into unrandarts.
TAG_MINOR_JIYVA = 17, // Added some player bits for Jiyva.
TAG_MINOR_ZOT_OPEN = 18, // Remember whether Zot was opened.
TAG_MINOR_JELLY = 19, // Remember whether the royal jelly is dead.
TAG_ANNOTATE_EXCL = 20, // Store exclusion information for annotations.
TAG_MINOR_UGLY = 21, // More ghost bits for (very) ugly things.
TAG_MINOR_ROTTING = 22, // Added monster-specific rotting resistance.
TAG_MINOR_TRANS = 23, // Keep track of cancellable transformations.
TAG_MINOR_GITREV = 24, // Removed SVN revision and added Git revision.
TAG_MINOR_VERSION = 24 // Current version. (Keep equal to max.)
TAG_MINOR_ARTEFACT = 0, // Turned fixed arts into unrandarts.
TAG_MINOR_JIYVA = 1, // Added some player bits for Jiyva.
TAG_MINOR_ZOT_OPEN = 2, // Remember whether Zot was opened.
TAG_MINOR_JELLY = 3, // Remember whether the royal jelly is dead.
TAG_ANNOTATE_EXCL = 4, // Store exclusion information for annotations.
TAG_MINOR_UGLY = 5, // More ghost bits for (very) ugly things.
TAG_MINOR_ROTTING = 6, // Added monster-specific rotting resistance.
TAG_MINOR_TRANS = 7, // Keep track of cancellable transformations.
TAG_MINOR_GITREV = 8, // Removed SVN revision and added Git revision.
TAG_MINOR_VERSION = 8 // Current version. (Keep equal to max.)
if (minorVersion >= TAG_MINOR_PORTEXT)
you.level_type_ext = unmarshallString(th);
}
you.level_type_name_abbrev = unmarshallString(th);
you.level_type_origin = unmarshallString(th);
you.level_type_tag = unmarshallString(th);
you.level_type_ext = unmarshallString(th);
// old: quiver info. Discard it.
count_c = unmarshallByte(th);
if (minorVersion >= TAG_MINOR_QUIVER)
// XXX: Hack to preserve compatibility despite renumbering the
// minor versions.
if (_minor_renumbering_correction)
{
// old: quiver info. Discard it.
count_c = unmarshallByte(th);
if (minorVersion >= TAG_MINOR_LUADGN)
{
if (!dlua.callfn("dgn_load_data", "u", &th))
mprf(MSGCH_ERROR, "Failed to load Lua persist table: %s",
dlua.error.c_str());
}
if (!dlua.callfn("dgn_load_data", "u", &th))
mprf(MSGCH_ERROR, "Failed to load Lua persist table: %s",
dlua.error.c_str());
if (_tag_minor_version >= TAG_MINOR_MONBASE)
m.base_monster = static_cast<monster_type>(unmarshallShort(th));
else
m.base_monster = static_cast<monster_type>(m.number);
m.base_monster = static_cast<monster_type>(unmarshallShort(th));
if (minorVersion >= TAG_MINOR_MAPMARK)
{
const long cooky = unmarshallLong(inf);
ASSERT(cooky == MARKERS_COOKY);
UNUSED(cooky);
}
const long cooky = unmarshallLong(inf);
ASSERT(cooky == MARKERS_COOKY);
UNUSED(cooky);
static bool _get_and_validate_version(FILE *restoreFile, char &major, char &minor,
std::string* reason)
// XXX: Minor version renumbering hack.
bool _minor_renumbering_correction = false;
static bool _get_and_validate_version(FILE *restoreFile, char &major,
char &minor, std::string* reason)
// NOTE: This is a hacky replacement for what should have been caught
// by MAJOR_VERSION above. Once the next major version update happens
// (preferably when saves break with 0.5 -> 0.6) this check will need
// to be removed.
if (minor < TAG_MINOR_RELIGION)
if (minor < 0)
}
// XXX: Temporary hack to avoid breaking savefile compatibility because
// of simply renumbering the minor-versions. Should be removed before
// 0.6 is released. 16 is the minor version which was introduced when
// the major version was bumped from 5 to 6.
COMPILE_CHECK(TAG_MINOR_VERSION < 16, c1);
if (minor >= 16)
{
mprf(MSGCH_WARN,
"Savefile minor version being changed from %d to %d "
"because of renumbering of minor versions after removing "
"0.5 minor versions.", minor, minor - 16);
minor -= 16;
_minor_renumbering_correction = true;