|
|
@@ -676,8 +676,22 @@ DLL_LINKAGE void GiveHero::applyGs(CGameState *gs)
|
|
|
|
|
|
DLL_LINKAGE void NewObject::applyGs(CGameState *gs)
|
|
|
{
|
|
|
- const TerrainTile &t = gs->map->getTile(pos);
|
|
|
- ETerrainType terrainType = t.terType;
|
|
|
+ ETerrainType terrainType;
|
|
|
+
|
|
|
+ if(ID == Obj::BOAT && !gs->isInTheMap(pos)) //special handling for bug #3060 - pos outside map but visitablePos is not
|
|
|
+ {
|
|
|
+ CGObjectInstance testObject = CGObjectInstance();
|
|
|
+ testObject.pos = pos;
|
|
|
+ testObject.appearance = VLC->objtypeh->getHandlerFor(ID, subID)->getTemplates(ETerrainType::WATER).front();
|
|
|
+
|
|
|
+ const int3 previousXAxisTile = int3(pos.x - 1, pos.y, pos.z);
|
|
|
+ assert(gs->isInTheMap(previousXAxisTile) && (testObject.visitablePos() == previousXAxisTile));
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ const TerrainTile & t = gs->map->getTile(pos);
|
|
|
+ terrainType = t.terType;
|
|
|
+ }
|
|
|
|
|
|
CGObjectInstance *o = nullptr;
|
|
|
switch(ID)
|