Index: ps/trunk/binaries/data/mods/public/simulation/ai/common-api/map-module.js =================================================================== --- ps/trunk/binaries/data/mods/public/simulation/ai/common-api/map-module.js +++ ps/trunk/binaries/data/mods/public/simulation/ai/common-api/map-module.js @@ -271,9 +271,16 @@ let w = this.width; if (kx < radius || kx >= w - radius || ky < radius || ky >= w - radius || this.map[kx+ky*w] === 0) return true; + if (!this.pattern || this.pattern[0] != radius) + { + this.pattern = [radius]; + let r2 = radius * radius; + for (let i = 1; i <= radius; ++i) + this.pattern.push(Math.floor(Math.sqrt(r2 - (i-0.5)*(i-0.5)) + 0.5)); + } for (let dy = 0; dy <= radius; ++dy) { - let dxmax = dy === 0 ? radius : Math.ceil(Math.sqrt(radius*radius - (dy-0.5)*(dy-0.5))); + let dxmax = this.pattern[dy]; let xp = kx + (ky + dy)*w; let xm = kx + (ky - dy)*w; for (let dx = -dxmax; dx <= dxmax; ++dx) Index: ps/trunk/binaries/data/mods/public/simulation/ai/petra/mapModule.js =================================================================== --- ps/trunk/binaries/data/mods/public/simulation/ai/petra/mapModule.js +++ ps/trunk/binaries/data/mods/public/simulation/ai/petra/mapModule.js @@ -88,9 +88,12 @@ if (template && template.buildDistance()) { let distance = template.buildDistance(); - let minDist = +distance.MinDistance; + let minDist = distance && distance.MinDistance ? +distance.MinDistance : 0; if (minDist) { + let obstructionRadius = template.obstructionRadius(); + if (obstructionRadius) + minDist -= obstructionRadius.min; let fromClass = distance.FromClass; let cellSize = passabilityMap.cellSize; let cellDist = 1 + minDist / cellSize;