If EntityX(HeroModel)>110
messageLoad()
EntityType HeroModel,0
posXInc()
U_l()
EndIf
по этому куску понятно ?
если игрок ушел вправо больше чем 110 то запускаеЦЦа posXInc()

Function posXInc()
FreeEntity x1z1
FreeEntity x1z2
FreeEntity x1z3 выгружаются левые куски уровня (переменных кусков 9 штук по имени понятно ? )
x1z1=x2z1
x1z2=x2z2
x1z3= x2z3
x2z1=x3z1
x2z2=x3z2
x2z3= x3z3 оставшиеся 6 кусков меняют переменную - сдвигаются влево
LocationX=LocationX+1 переменная текущей локации по Х
If LocationX=x_max +1 LocationX=x_min если край мира то переходим на противоположный край
level$=levelSet$(LocationX,LocationZ) строковые преобразования - получаем имя текущего уровня
;--------------load-----------
высчитываем промежуточные значения:
xi=LocationX+1
xd=LocationX-1
zd=LocationZ-1
zi=LocationZ+1
If xd<x_min xd=xd+(x_max-x_min)
If xi>x_max xi=xi-(x_max-x_min)
If zd<z_min zd=zd+(x_max-x_min)
If zi>z_max zi=zi-(x_max-x_min)
Грузим 3 новых куска
Level_A$="0"+(xi)+"_"+"0"+(zd)
x3z1=CreateScene(Level_A$)
Level_A$="0"+(xi)+"_"+"0"+(LocationZ)
x3z2=CreateScene(Level_A$)
Level_A$="0"+(xi)+"_"+"0"+(zi)
x3z3=CreateScene(Level_A$)
PosLevel() расставляем все куски на свои "родные" места в мире
PositionEntity HeroModel,EntityX(HeroModel)-200,EntityY(HeroModel),EntityZ(HeroModel) перемещаем героя на место
End Function
Function levelSet$(x,z)
xstr$=Str(x)
zStr$=Str(z)
If x<10
xstr$="0"+xstr$
EndIf
If z<10
zStr$="0"+zStr$
EndIf
Return xstr$+"_"+zStr$
End Function
При перемещении героя отключаем ему коллизию, потом опять включаем
имена уровней по такому принципу: 04_06.b3d
то есть доступно 10 000 кусков
мир 20х20 км
если нужно больше - просто перейти к другой папке
