Comments 7
Я сделал по другому:
1) Извлек все ресурсы ( пока это спрайты) утилитой в формат BMP.
2) Конвертнул все в GIF с учетом прозрачности.
3) Запихнул все в собственный файл ресурса.
Использовать информацию напрямую из оригинального файла данных игры мне показалось достаточно ресурсоемко. Особенно если приходится подгружать одновременно большое количество текстур. А распаковывать и держать в памяти - достаточно объёмно получается.
Хотя если изначально закладывать возможность расширения игры дополнительными модулями - возможно ваш вариант будет предпочтительнее.
В любом случае нужно думать и анализировать.
Дело в том, что графики в игре где-то на 600 мб. Таскать такой патч для установки, как то чрезмерно. Распаковать файл из архива + распарсить формат графики art, занимает 1000 строк. Проще это реализовать, чем заниматься таким шаманством.
Особенно если приходится подгружать одновременно большое количество текстур. А распаковывать и держать в памяти - достаточно объёмно получается.
Нет не много. Даже для старых GPU с объемом меньше 32 мб, все влезет.
Хотя если изначально закладывать возможность расширения игры дополнительными модулями - возможно ваш вариант будет предпочтительнее.
Я думаю, добавить не только поддержку модулей игры, но еще и плагины. То есть можно одновременно подключать несколько модулей, главное подключить в нужном порядке.
К примеру есть мод котрый изменяет только баланс оружия и предметов в игре. Теоритически его можно подключить к любому моду.
В любом случае нужно думать и анализировать.
Постоянно это делаю.
У кого есть мак,протестируйте плиз собираемость проекта на маке. Буду очень благодарен. Если есть ошибки, можете прямо сюда в комменты прислать. Я постараюсь поправить.
Прикрутите github actions к проекту и собирайте автоматом и на маке, и на винде и на линуксе.
вместо чтения по-полям
https://en.cppreference.com/w/cpp/types/integer.html
int32_t фиксированная ширина
подобные структуры могу читаться и писаться целиком примерно так как реализован формат BMP
https://graphics.stanford.edu/~mdfisher/Code/Engine/Bitmap.h.html
https://graphics.stanford.edu/~mdfisher/Code/Engine/Bitmap.cpp.html
BITMAPFILEHEADER bmfh;
fread(&bmfh, sizeof(BITMAPFILEHEADER), 1, file);
https://learn.microsoft.com/en-us/windows/win32/api/wingdi/ns-wingdi-bitmapfileheader
или так
https://solarianprogrammer.com/2018/11/19/cpp-reading-writing-bmp-images/
struct BMPFileHeader {
uint16_t file_type{0x4D42}; // File type always BM which is 0x4D42
uint32_t file_size{0}; // Size of the file (in bytes)
uint16_t reserved1{0}; // Reserved, always 0
uint16_t reserved2{0}; // Reserved, always 0
uint32_t offset_data{0}; // Start position of pixel data (bytes from the beginning of the file)
};
Пилим движок Arcanum. Урок 02. Работа с файлами игры, рисуем первый спрайт