|
|
|
|
|
Профиль : |
|
[M210®], ты смотрел программы тут: http://www.bloodgame.ru/deepcoldgrave/workshop/mapformat.php MAPInside - на Delphi, можно загружать до двух карт, смотреть содержимое отдельных блоков секторов, стен, спрайтов. Красным подсвечивается разница в этих блоках. Я использовал эту программу для описания формата: менял что-то одно в MAPEDIT, сохранял карту с новым именем, затем сравнивал в программе с предыдущей версией. Таким образом в принципе можно определить за что каждый бит отвечает. Так же есть дизассемблерные листинги непосредственно из MAPEDIT. Этим занимался jm. В обеих программах есть расчет CRC32 - можешь посмотреть. Насколько я помню, алгоритм - простой: последовательный XOR значений с заранее определенными в таблице. Хотя по статье из википедии ясно, что таблица тоже рассчитывается, но для ускорения эти значения обычно заранее забиваются хардкодом. |
|
Всего записей: 888 : Дата рег-ции: Июнь 2004 : Отправлено: 04 Декабря, 2015 - 18:03:18 |
|
|
|
|
WWW : Профиль : |
|
Slava, прогу не смотрел, т.к. я и в своей проге вижу изменения. Но раз там есть расчет CRC32, посмотрю ее, интересно
Сейчас пишу чтение extra части спрайтов....получил много экспириенса в побитовом чтении Тут и действительно шифровка не нужна...эти битовые поля - та еще шифровка сама по себе....впервые сталкиваюсь с хранением двух short переменных в 3х байтах...пришлось изучать битовые маски...ну вроде успешно, сейчас читаются данные до goingOn и goingOff, мне нужно добраться до Launch переменных, буду использовать эти данные в своем BloodCM
(Отредактировано автором: 05 Декабря, 2015 - 11:17:40) |
|
Всего записей: 946 : Дата рег-ции: Янв. 2008 : Отправлено: 05 Декабря, 2015 - 11:16:41 |
|
|
|
|
WWW : Профиль : |
|
В таблице 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) |
|
Всего записей: 946 : Дата рег-ции: Янв. 2008 : Отправлено: 05 Декабря, 2015 - 13:36:31 |
|
|
|