1
0
mirror of https://github.com/vcmi/vcmi.git synced 2025-06-17 00:07:41 +02:00

Select random object template instead of first

This commit is contained in:
nordsoft
2023-09-30 01:19:18 +02:00
parent 811680c4c5
commit ce62ab3e66
7 changed files with 28 additions and 26 deletions

View File

@ -354,7 +354,7 @@ bool ObjectManager::createRequiredObjects()
for(const auto & objInfo : requiredObjects)
{
rmg::Object rmgObject(*objInfo.obj);
rmgObject.setTemplate(zone.getTerrainType());
rmgObject.setTemplate(zone.getTerrainType(), zone.getRand());
bool guarded = addGuard(rmgObject, objInfo.guardStrength, (objInfo.obj->ID == Obj::MONOLITH_TWO_WAY));
Zone::Lock lock(zone.areaMutex);
@ -394,7 +394,7 @@ bool ObjectManager::createRequiredObjects()
auto possibleArea = zone.areaPossible();
rmg::Object rmgObject(*objInfo.obj);
rmgObject.setTemplate(zone.getTerrainType());
rmgObject.setTemplate(zone.getTerrainType(), zone.getRand());
bool guarded = addGuard(rmgObject, objInfo.guardStrength, (objInfo.obj->ID == Obj::MONOLITH_TWO_WAY));
auto path = placeAndConnectObject(zone.areaPossible(), rmgObject,
[this, &rmgObject](const int3 & tile)
@ -480,7 +480,7 @@ void ObjectManager::placeObject(rmg::Object & object, bool guarded, bool updateD
if (!monster->object().appearance)
{
//Needed to determine visitable offset
monster->setAnyTemplate();
monster->setAnyTemplate(zone.getRand());
}
object.getPosition();
auto visitableOffset = monster->object().getVisitableOffset();
@ -492,7 +492,7 @@ void ObjectManager::placeObject(rmg::Object & object, bool guarded, bool updateD
int3 parentOffset = monster->getPosition(true) - monster->getPosition(false);
monster->setPosition(fixedPos - parentOffset);
}
object.finalize(map);
object.finalize(map, zone.getRand());
Zone::Lock lock(zone.areaMutex);
zone.areaPossible().subtract(object.getArea());
@ -689,7 +689,7 @@ bool ObjectManager::addGuard(rmg::Object & object, si32 strength, bool zoneGuard
});
auto & instance = object.addInstance(*guard);
instance.setAnyTemplate(); //terrain is irrelevant for monsters, but monsters need some template now
instance.setAnyTemplate(zone.getRand()); //terrain is irrelevant for monsters, but monsters need some template now
//Fix HoTA monsters with offset template
auto visitableOffset = instance.object().getVisitableOffset();