1
0
mirror of https://github.com/vcmi/vcmi.git synced 2025-01-12 02:28:11 +02:00

Merge pull request #4535 from IvanSavenko/savecompat_bump

Removed save compatibility with 1.4
This commit is contained in:
Ivan Savenko 2024-08-31 13:51:10 +03:00 committed by GitHub
commit 8cfc1c4ee1
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
14 changed files with 36 additions and 97 deletions

View File

@ -1639,15 +1639,6 @@ void CPlayerInterface::showMarketWindow(const IMarket * market, const CGHeroInst
cb->selectionMade(0, queryID);
};
if (market->allowsTrade(EMarketMode::ARTIFACT_EXP) && market->getArtifactsStorage() == nullptr)
{
// compatibility check, safe to remove for 1.6
// 1.4 saves loaded in 1.5 will not be able to visit Altar of Sacrifice due to Altar now requiring different map object class
static_assert(ESerializationVersion::RELEASE_143 < ESerializationVersion::CURRENT, "Please remove this compatibility check once it no longer needed");
onWindowClosed();
return;
}
if(market->allowsTrade(EMarketMode::ARTIFACT_EXP) && visitor->getAlignment() != EAlignment::EVIL)
GH.windows().createAndPushWindow<CMarketWindow>(market, visitor, onWindowClosed, EMarketMode::ARTIFACT_EXP);
else if(market->allowsTrade(EMarketMode::CREATURE_EXP) && visitor->getAlignment() != EAlignment::GOOD)

View File

@ -137,13 +137,11 @@ public:
h & daysWithoutCastle;
h & cheated;
h & battleBonuses;
if (h.version >= Handler::Version::ARTIFACT_COSTUMES)
h & costumesArtifacts;
h & costumesArtifacts;
h & enteredLosingCheatCode;
h & enteredWinningCheatCode;
h & static_cast<CBonusSystemNode&>(*this);
if (h.version >= Handler::Version::DESTROYED_OBJECTS)
h & destroyedObjects;
h & destroyedObjects;
}
};

View File

@ -52,9 +52,10 @@ struct DLL_LINKAGE SimturnsInfo
h & optionalTurns;
h & allowHumanWithAI;
static_assert(Handler::Version::RELEASE_143 < Handler::Version::CURRENT, "Please add ignoreAlliedContacts to serialization for 1.6");
// disabled to allow multiplayer compatibility between 1.5.2 and 1.5.1
// h & ignoreAlliedContacts
if (h.version >= Handler::Version::SAVE_COMPATIBILITY_FIXES)
h & ignoreAlliedContacts;
else
ignoreAlliedContacts = true;
}
};
@ -183,10 +184,7 @@ struct DLL_LINKAGE StartInfo : public Serializeable
h & fileURI;
h & simturnsInfo;
h & turnTimerInfo;
if(h.version >= Handler::Version::HAS_EXTRA_OPTIONS)
h & extraOptionsInfo;
else
extraOptionsInfo = ExtraOptionsInfo();
h & extraOptionsInfo;
h & mapname;
h & mapGenOptions;
h & campState;

View File

@ -95,15 +95,7 @@ struct DLL_LINKAGE Bonus : public std::enable_shared_from_this<Bonus>, public Se
h & source;
h & val;
h & sid;
if (h.version < Handler::Version::BONUS_META_STRING)
{
std::string oldDescription;
h & oldDescription;
description = MetaString::createFromRawString(oldDescription);
}
else
h & description;
h & description;
h & additionalInfo;
h & turnsRemain;
h & valType;
@ -114,11 +106,6 @@ struct DLL_LINKAGE Bonus : public std::enable_shared_from_this<Bonus>, public Se
h & updater;
h & propagationUpdater;
h & targetSourceType;
if (h.version < Handler::Version::MANA_LIMIT && type == BonusType::MANA_PER_KNOWLEDGE_PERCENTAGE)
{
if (valType == BonusValueType::ADDITIVE_VALUE || valType == BonusValueType::BASE_NUMBER)
val *= 100;
}
}
template <typename Ptr>

View File

@ -141,8 +141,7 @@ public:
h & modName;
h & music;
h & encoding;
if (h.version >= Handler::Version::RELEASE_143)
h & textContainer;
h & textContainer;
}
};
@ -342,8 +341,7 @@ public:
h & currentMap;
h & chosenCampaignBonuses;
h & campaignSet;
if (h.version >= Handler::Version::CAMPAIGN_MAP_TRANSLATIONS)
h & mapTranslations;
h & mapTranslations;
if (h.version >= Handler::Version::HIGHSCORE_PARAMETERS)
h & highscoreParameters;
}

View File

@ -152,16 +152,7 @@ public:
void serialize(Handler & h)
{
h & modScope;
if(h.version >= Handler::Version::JSON_FLAGS)
{
h & overrideFlag;
}
else
{
std::vector<std::string> oldFlags;
h & oldFlags;
}
h & overrideFlag;
h & data;
}
};

View File

@ -31,7 +31,8 @@ public:
int availableUnits(EMarketMode mode, int marketItemSerial) const override; //-1 if unlimited
std::set<EMarketMode> availableModes() const override;
template <typename Handler> void serialize(Handler &h)
template <typename Handler>
void serialize(Handler &h)
{
h & static_cast<CGObjectInstance&>(*this);
if (h.version < Handler::Version::NEW_MARKETS)
@ -53,6 +54,7 @@ public:
template <typename Handler> void serializeArtifactsAltar(Handler &h)
{
serialize(h);
IMarket::serializeArtifactsAltar(h);
}
};

View File

@ -36,6 +36,11 @@ public:
CArtifactSet * getArtifactsStorage() const;
bool getOffer(int id1, int id2, int &val1, int &val2, EMarketMode mode) const; //val1 - how many units of id1 player has to give to receive val2 units
template <typename Handler> void serializeArtifactsAltar(Handler &h)
{
h & *altarArtifactsStorage;
}
private:
std::unique_ptr<CArtifactSetAltar> altarArtifactsStorage;
};

View File

@ -196,14 +196,6 @@ public:
h & quests;
h & allHeroes;
if (h.version < Handler::Version::DESTROYED_OBJECTS)
{
// old save compatibility
//FIXME: remove this field after save-breaking change
h & questIdentifierToId;
resolveQuestIdentifiers();
}
//TODO: viccondetails
h & terrain;
h & guardingCreaturePositions;

View File

@ -277,12 +277,16 @@ public:
h & width;
h & height;
h & twoLevel;
// FIXME: we should serialize enum's according to their underlying type
// should be fixed when we are making breaking change to save compatibility
static_assert(Handler::Version::MINIMAL < Handler::Version::RELEASE_143);
uint8_t difficultyInteger = static_cast<uint8_t>(difficulty);
h & difficultyInteger;
difficulty = static_cast<EMapDifficulty>(difficultyInteger);
if (h.version >= Handler::Version::SAVE_COMPATIBILITY_FIXES)
h & difficulty;
else
{
uint8_t difficultyInteger = static_cast<uint8_t>(difficulty);
h & difficultyInteger;
difficulty = static_cast<EMapDifficulty>(difficultyInteger);
}
h & levelLimit;
h & areAnyPlayers;
h & players;

View File

@ -55,18 +55,7 @@ struct DLL_LINKAGE LobbyClientConnected : public CLobbyPackToPropagate
h & clientId;
h & hostClientId;
try
{
if (h.version >= Handler::Version::RELEASE_152)
h & version;
else
version = ESerializationVersion::RELEASE_150;
}
catch (const std::runtime_error &)
{
version = ESerializationVersion::RELEASE_150;
}
h & version;
}
};

View File

@ -77,10 +77,7 @@ public:
h & startingTown;
h & playerType;
h & team;
if (h.version >= Handler::Version::RELEASE_143)
h & startingHero;
else
startingHero = HeroTypeID::RANDOM;
h & startingHero;
}
};

View File

@ -31,25 +31,13 @@ enum class ESerializationVersion : int32_t
{
NONE = 0,
MINIMAL = 831,
RELEASE_143, // 832 +text container in campaigns, +starting hero in RMG options
HAS_EXTRA_OPTIONS, // 833 +extra options struct as part of startinfo
DESTROYED_OBJECTS, // 834 +list of objects destroyed by player
CAMPAIGN_MAP_TRANSLATIONS, // 835 +campaigns include translations for its maps
JSON_FLAGS, // 836 json uses new format for flags
MANA_LIMIT, // 837 change MANA_PER_KNOWLEDGE to percentage
BONUS_META_STRING, // 838 bonuses use MetaString instead of std::string for descriptions
TURN_TIMERS_STATE, // 839 current state of turn timers is serialized
ARTIFACT_COSTUMES, // 840 swappable artifacts set added
RELEASE_150 = ARTIFACT_COSTUMES, // for convenience
RELEASE_150 = 840,
MINIMAL = RELEASE_150,
VOTING_SIMTURNS, // 841 - allow modification of simturns duration via vote
REMOVE_TEXT_CONTAINER_SIZE_T, // 842 Fixed serialization of size_t from text containers
BANK_UNIT_PLACEMENT, // 843 Banks have unit placement flag
RELEASE_152 = BANK_UNIT_PLACEMENT,
RELEASE_156 = BANK_UNIT_PLACEMENT,
COMPACT_STRING_SERIALIZATION, // 844 - optimized serialization of previously encountered strings
@ -67,6 +55,7 @@ enum class ESerializationVersion : int32_t
STATISTICS_SCREEN, // 856 - extent statistic functions
NEW_MARKETS, // 857 - reworked market classes
PLAYER_STATE_OWNED_OBJECTS, // 858 - player state stores all owned objects in a single list
SAVE_COMPATIBILITY_FIXES, // 859 - implementation of previoulsy postponed changes to serialization
CURRENT = PLAYER_STATE_OWNED_OBJECTS
CURRENT = SAVE_COMPATIBILITY_FIXES
};

View File

@ -243,9 +243,7 @@ public:
h & *heroPool;
h & *playerMessages;
h & *turnOrder;
if (h.version >= Handler::Version::TURN_TIMERS_STATE)
h & *turnTimerHandler;
h & *turnTimerHandler;
#if SCRIPTING_ENABLED
JsonNode scriptsState;