есть хорошие новости.
struct rw_raw_info_block {
DWORD block_id;
DWORD data[3];
};
struct rw_raw_info {
DWORD blocks;
DWORD info[3];
DWORD padding[2];
rw_raw_info_block block[3];
DWORD unknown[2];
};
это мой приблизительный код для тех 80-ти байт, которые есть перед каждой текстурой или палитрой. (не хватает методов класса, которые всё инициализируют).
по сути, эти 80 байт - это константы. для палитры вообще существует чуть ли не 2 значения (swizzled и unswizzled), но я ещё не разобрал что к чему.
что интересно, третий блок отвечает за размер данных следующих далее (палитры или растра - не важно). размер указан в 16-байтовых блоках.
но легче определить, есть ли swizzling или нет - сравнить разрешение в блоке информации (64 байта) и в первом блоке здесь. для swizzled-текстур значение здесь меньше в два раза, а для unswizzled - сходится.
далеко не факт, что это - единственное отличие, но теперь я могу сам определять, когда нужен swizzling, а когда нет при просмотре.
также в GTA3 есть около 10 текстур другой RW-версии, которые, на данный момент, нормально нигде не открываются. возможно, они не открываются и в игре - я пока не проверял.
Сообщение отредактировал Lego: 17 August 2011 - 12:58