function GetTerrainNormal_IsPathable takes real X, real Y returns boolean
local real GridX = R2I(X/128+RSignBJ(X)*0.5)*128
local real GridY = R2I(Y/128+RSignBJ(Y)*0.5)*128
local integer i = 0
local boolean b = GetTerrainType(GridX,GridY)==PHYSX_TERRAIN_PATHABLE_TILE
local boolean c = false
if RAbsBJ(X-GridX)+RAbsBJ(Y-GridY)<64 then
return b
endif
set GridX = R2I(X/128)*128+RSignBJ(X)*64
set GridY = R2I(Y/128)*128+RSignBJ(Y)*64
if GetTerrainType(GridX+64,GridY+64)==PHYSX_TERRAIN_PATHABLE_TILE then
set i = i + 1
if GetTerrainType(GridX-64,GridY-64)==PHYSX_TERRAIN_PATHABLE_TILE then
set i = i + 1
set c = true
endif
elseif GetTerrainType(GridX-64,GridY-64)==PHYSX_TERRAIN_PATHABLE_TILE then
set i = i + 1
endif
if GetTerrainType(GridX+64,GridY-64)==PHYSX_TERRAIN_PATHABLE_TILE then
set i = i + 1
if GetTerrainType(GridX-64,GridY+64)==PHYSX_TERRAIN_PATHABLE_TILE then
set i = i + 1
set c = true
endif
elseif GetTerrainType(GridX-64,GridY+64)==PHYSX_TERRAIN_PATHABLE_TILE then
set i = i + 1
endif
if i>2 then
return true
elseif i<2 or (c and RAbsBJ(X-GridX)+RAbsBJ(Y-GridY)<32) then
return false
endif
return b
endfunction