Цитата
3.8 MAP0.MUL
This file holds all the base-level terrain, and doesn't look too pretty without the static data.
The map is stored as a 768x512 matrix of blocks. A block is basically a 8x8 matrix of cells. Each individual cell contains data about the tile for that cell, and the cell's altitude. Therefore, the entire map is 6144x4096 individual cells in size.
Blocks are loaded top-to-bottom then left-to-right. Cells are loaded from blocks left-to-right then top-to-bottom.
The formula used to locate an individual CELL in the file is a little complex, since you have to work out what block it is in...
If you refer to the map in blocks, then there's 512 blocks down, by 768 blocks across.
XBlock = Int(XPos/8)
YBlock = Int(YPos/8)
Block Number = (XBlock * 512) + YBlock
MAP0 (37,748,736 bytes)
393,216 [Block]s sequentially, Block = 196 bytes
DWORD header, unknown content
64 Cells
Cell (3 bytes)
0 1 2
Color Alt
UWORD cell graphic (which can be looked up in RADARCOL).
BYTE Altitude (-128..127 units above/below sea level).
Помогите вычислить номер тайла в блоке, что то не доходит как это делается.
Блок 8х8 загрузить получилось:
Код
XBlock=floor(1415/8) // Х блока
YBlock=floor(1700/8) // У блока
BlockNumber=(XBlock * 512) + YBlock //номер блока
for (i=0;i<=195;i+=1){//1 блок = 196 байтам, цикл счетчик для чтения 196 байтов
file_bin_seek(map0,(BlockNumber*196)+i)//сдвиг метки чтения в файле
data[i]=file_bin_read_byte(map0) //чтение побайтово в массив
}
cnt=6
for (ii=1;ii<=8;ii+=1){
for (iii=1;iii<=8;iii+=1){
tile[iii,ii]=data[cnt]
cnt+=3
}
}
Результат массив tile[iii,ii] с высотой тайлов всего блока, но как определить высоту у определенного тайла?