.::Russian Blood Community Forum::. »Blood: The Game We Playing In » Editing Center » Структура MAP
Страниц (3): « 1 2 [3]
65. Slava - 04 Декабря, 2015 - 18:03:18
[M210®], ты смотрел программы тут:
http://www.bloodgame.ru/deepcoldgrave/workshop/mapformat.php
MAPInside - на Delphi, можно загружать до двух карт, смотреть содержимое отдельных блоков секторов, стен, спрайтов. Красным подсвечивается разница в этих блоках. Я использовал эту программу для описания формата: менял что-то одно в MAPEDIT, сохранял карту с новым именем, затем сравнивал в программе с предыдущей версией. Таким образом в принципе можно определить за что каждый бит отвечает.
Так же есть дизассемблерные листинги непосредственно из MAPEDIT. Этим занимался jm.
В обеих программах есть расчет CRC32 - можешь посмотреть. Насколько я помню, алгоритм - простой: последовательный XOR значений с заранее определенными в таблице. Хотя по статье из википедии ясно, что таблица тоже рассчитывается, но для ускорения эти значения обычно заранее забиваются хардкодом.

66. [M210®] - 05 Декабря, 2015 - 11:16:41
Slava, прогу не смотрел, т.к. я и в своей проге вижу изменения.
Но раз там есть расчет CRC32, посмотрю ее, интересно Улыбка

Сейчас пишу чтение extra части спрайтов....получил много экспириенса в побитовом чтенииШпион Тут и действительно шифровка не нужна...эти битовые поля - та еще шифровка сама по себе....впервые сталкиваюсь с хранением двух short переменных в 3х байтах...пришлось изучать битовые маски...ну вроде успешно, сейчас читаются данные до goingOn и goingOff, мне нужно добраться до Launch переменных, буду использовать эти данные в своем BloodCMУлыбка

(Отредактировано автором: 05 Декабря, 2015 - 11:17:40)

67. [M210®] - 05 Декабря, 2015 - 13:36:31
В таблице extraSprite не дописаны 4 переменные
Код:

                Decoupled = (short) (data[13] & 0b00000001) != 0;
  System.out.println("Decoupled " + Decoupled);
   
  Shot1 = (short) (data[13] & 0b00000010) >> 1 != 0;
  System.out.println("Shot1 " + Shot1);
   
  Locked = (short) (data[23] & 0b00100000) >> 5 != 0;
  System.out.println("Locked " + Locked);
   
  Interrutable = (short) (data[11] & 0b00000010) >> 1 != 0;
  System.out.println("Interrutable " + Interrutable);

А вообще странная структура...используют биты, чтобы сэкономить память, но при этом оставляют дыры, которые сводят на "нет" всю экономию....зачем?

А вообще, всю extrasprite структуру прочитал....теперь надо бы потестить ее

(Отредактировано автором: 05 Декабря, 2015 - 14:33:21)


Powered by ExBB 1.9.1
Original Style v1.5a2 created by Daemon.XP