Цитата:
Сообщение от GreyL
З.Ы. подскажите формат файла tga_table.
|
Да запросто

для удобства буду называть map_C - Иловский файл, тот что работает в паре с tga_table, а map_C_e - человеческий, который править удобно.
Оба они строятся из блоков 32х32 пикселя.
map_C имеет стандартную ширину 1024 пикселей (32 блока).
Весь файл состоит из 4-х байтных целых значений. Особенность только в том, что значения укладываются в сетевом порядке байт (по мотороловски) по младшему адресу - старший байт. Т.е. байты в файл нужно толкать в порядке Самый старший, .., .., самый младший.
Структура файла:
- ширина map_C_e в пикселях
- высота map_C_e в пикселях
- количество блоков 32х32 по горизонтали (т.е. ширина map_C_e / 32)
- количество блоков 32х32 по вертикали (т.е. высота map_C_e / 32)
- (ширина map_C_e / 32) * (высота map_C_e / 32) значений - индексов блоков в Иловском map_C.
В обоих файлах ( map_C и map_C_e ) блоки 32х32 пикселя перебираются по строкам слева направо, сверху вниз.
Напимер индекс 0 соответствует верхнему левому блоку в map_C,
индекс 1 - второму блоку в первой строке блоков,
индекс 100 - пятому блоку в четвертой строке.
Первые два блока как правило это полностью черный (с индексом 0) и полностью белый (с индексом 1).
Т.е. по сути этот формат хранения - что то типа компрессии. Все чисто водные или чисто сухопутные блоки map_C_e ссылаются на первые 2 блока map_C, а таких обычно большинство.
НО.
Исследования показали, map_C не обязан быть шириной именно 32 блока!
Он может иметь хоть по 1 блоку в строке - и Ил нормально читает такие файлы.
Это может оказаться полезно при работе с гиганскими картами, насыщенными неодноцветными квадратами - согласно формату Truevision TARGA (*.tga) файл не может быть выше или шире 65535 пикселей (там двухбайтные значения), и если хранить по 32 квадрата в ряд, в высоту файл map_C может получиться очень большим. Вот тут и пригодится возможность укладывать в строки напр по 64 или 100 квадратов
И углубляясь совсем в извращения можно вообще не разбирать map_C_e - просто переименовать его в map_C, и сфабриковать правильный map_c.tga_table ( просто свалить в него подряд значения индексов от 0 до (ширина map_C_e / 32) * (высота map_C_e / 32) - 1 ) - и Ил скорее всего такой файл схавает

Но утилиты CMap.jar и Map_C_Toolbox скорее всего не умеют работать с map_C шириной не 32 блока (1024 пикселя). ( map_x_Tool умеет )