Цитата:
Сообщение от Donatte
Выложите в этой теме, если не затруднит.
|
Пока, то что разобрал.
Структура заголовка у DAT:
byte -- сохраняется в массиве (регион по x)
byte -- сохраняется в массиве (регион по y)
short (word) -- не сохраняется (всегда 0x0080, возможно макс. число слоев)
short (word) -- не сохраняется (всегда 0x0010, дискретность клетки)
int (dword) -- сохраняется в массиве (общее количество ячеек для комплекса и слоев для мультилевела)
int (dword) -- не сохраняется (количество всех блоков, кроме multilevel)
int (dword) -- не сохраняется (количество flat блоков)
Первые два байта сохраняются в массив и после чекаются на ренж (результат чека сейвится в массив сдвиг от второго байта 7):
Код:
first <= 17 ||
first == 18 && second >= 23 ||
first == 19 && (second == 18 || second == 24) ||
first == 20 && second >= 23 ||
first == 21 && (second == 18 || second == 23) ||
first == 22 && (second == 22 || second == 23);
На следующий байт (сдвиг 8 от второго байта) в массиве кладем ноль.
ЗЫ: под массивом я имею ввиду мемори-хранилище в птске

ЗЫЫ: разобранный листинг дизасма не буду выкладывать, т.к. не вижу смысла
Тестер ячеек:
Свернуть ↑
Код:
public static void main(String[] args) throws Throwable {
int original, real = 0;
try(RandomAccessFile raf = new RandomAccessFile(new File("./16_10_conv.dat"), "r"); FileChannel fc= raf.getChannel()) {
ByteBuffer bb = fc.map(MapMode.READ_ONLY, 0, fc.size());
bb.order(ByteOrder.LITTLE_ENDIAN);
bb.position(6);
original = bb.getInt();
bb.position(18);
//real = (bb.limit() - bb.position());
for(int i = 0; i < 65536; i++) {
short blocktype = bb.getShort();
//real += 2;
if(blocktype == 0) {
bb.position(bb.position() + 4);
//real += 2;
} else if(blocktype == 0x0040) {
bb.position(bb.position() + 128);
real += 64;
} else /*if(blocktype == 0x0048)*/ {
for(int j = 0; j < 64; j++) {
short layers = bb.getShort();
//real += 2;
real += layers;
bb.position(bb.position() + (layers << 1));
}
}
}
System.out.println(bb.position());
System.out.println(bb.limit());
}
System.out.println("Original " + original + ", \r\n"
+ "real " + real);
}
Свернуть ↑Развернуть ↓
Have fun!