mirror of
https://github.com/vcmi/vcmi.git
synced 2025-11-06 09:09:40 +02:00
Fix loading of SoD & later maps
This commit is contained in:
@@ -946,4 +946,10 @@ void CMap::saveCompatibilityAddMissingArtifact(std::shared_ptr<CArtifactInstance
|
||||
artInstances.push_back(artifact);
|
||||
}
|
||||
|
||||
ObjectInstanceID CMap::allocateUniqueInstanceID()
|
||||
{
|
||||
objects.push_back(nullptr);
|
||||
return ObjectInstanceID(objects.size() - 1);
|
||||
}
|
||||
|
||||
VCMI_LIB_NAMESPACE_END
|
||||
|
||||
@@ -110,6 +110,7 @@ public:
|
||||
void removeArtifactInstance(CArtifactSet & set, const ArtifactPosition & slot);
|
||||
|
||||
void generateUniqueInstanceName(CGObjectInstance * target);
|
||||
ObjectInstanceID allocateUniqueInstanceID();
|
||||
|
||||
///Use only this method when creating new map object instances
|
||||
void addNewObject(std::shared_ptr<CGObjectInstance> obj);
|
||||
|
||||
@@ -1921,7 +1921,6 @@ std::shared_ptr<CGObjectInstance> CMapLoaderH3M::readObject(MapObjectID id, MapO
|
||||
void CMapLoaderH3M::readObjects()
|
||||
{
|
||||
uint32_t objectsCount = reader->readUInt32();
|
||||
ObjectInstanceID nextObjectID(0);
|
||||
|
||||
for(uint32_t i = 0; i < objectsCount; ++i)
|
||||
{
|
||||
@@ -1936,14 +1935,15 @@ void CMapLoaderH3M::readObjects()
|
||||
auto originalSubID = originalTemplate->subid;
|
||||
reader->skipZero(5);
|
||||
|
||||
auto newObject = readObject(originalID, originalSubID, remappedTemplate, mapPosition, nextObjectID);
|
||||
ObjectInstanceID newObjectID = map->allocateUniqueInstanceID();
|
||||
auto newObject = readObject(originalID, originalSubID, remappedTemplate, mapPosition, newObjectID);
|
||||
|
||||
if(!newObject)
|
||||
continue;
|
||||
|
||||
newObject->setAnchorPos(mapPosition);
|
||||
newObject->ID = remappedTemplate->id;
|
||||
newObject->id = nextObjectID;
|
||||
newObject->id = newObjectID;
|
||||
if(newObject->ID != Obj::HERO && newObject->ID != Obj::HERO_PLACEHOLDER && newObject->ID != Obj::PRISON)
|
||||
{
|
||||
newObject->subID = remappedTemplate->subid;
|
||||
@@ -1955,7 +1955,6 @@ void CMapLoaderH3M::readObjects()
|
||||
|
||||
map->generateUniqueInstanceName(newObject.get());
|
||||
map->addNewObject(newObject);
|
||||
nextObjectID.num += 1;
|
||||
}
|
||||
|
||||
map->postInitialize();
|
||||
|
||||
Reference in New Issue
Block a user