8-битные индексированные изображения для игр, разработанных в 90-х годах

В настоящее время я работаю над старой классической игрой для ПК. Программирование сталкивается со многими проблемами, в основном потому, что я не получил образование как программист или дизайнер. Хотя моя страсть к этой конкретной игре заставляет меня это делать.

В настоящее время я пытаюсь открыть изображения для игры. Изображения сделаны с помощью Paint Deluxe 2. Из того, что я обнаружил, все они имеют формат PCX, когда вы открываете их для добавления изменений. Затем они сохраняются в игре во внешнем архиве рядом с исполняемым файлом в виде.bmp-файлов (насколько я понимаю). Используемая палитра на самом деле немного странная с 6-битными каналами (а не 8-битными, как вы ожидаете).

У меня проблема с разработчиками, как это сделать. Перед добавлением изображений в файл, заголовок был удален, а палитра сохранена во внешнем файле. В Paint Deluxe 2 сохраните длину пикселей от 190x107 до 20544 байтов (189x107-190x107-191x107 и 192x107 - все сохраняются как 20544 байта пикселей, исключая заголовок и палитру). Хотя на самом деле должно быть 20330 байт. Это приносит мне головную боль. Кроме того, кажется, что изображения, используемые для игры, как-то наоборот. Похоже, изображения хранятся как-то в обратном направлении.

Чтобы прояснить ситуацию: FILE34 размером 20330 байт - это файл ORGINAL, загруженный игрой на экран. FILE34, размер которого составляет 20544 байта, - это то, с чем я сталкиваюсь, когда удаляю файл после его возврата обратно в формат pcx, а затем в формат bmp. Pcx-файл также включен и может быть открыт, например, с помощью GIMP. BIN_PALETTE.PAL - палитра, используемая для изображений.

Кто-нибудь знаком с этой проблемой и может дать мне несколько советов? введите описание ссылки здесь

1 ответ

Файлы BMP обычно хранятся снизу вверх (последняя строчная строка сохраняется первой, а вся верхняя - до первой строчной строки). Более свежие BMP-файлы также могут храниться сверху вниз, как и другие форматы, но это встречается реже. Если файлы игры хранятся сверху вниз, они будут отображаться как перевернутые, по сравнению с обычным BMP-файлом.

Кроме того, формат BMP дополняет каждую строку развертки до границы в 32 бита (длинное слово), поэтому размер файла одинаков для ширины 189-192 (все они требуют 192 байта на линию развертки). Если файлы игры хранятся без этого отступа, это является причиной разницы.

Для получения дополнительной информации см. Формат файла BMP в Википедии.

Довольно легко переписать ваши BMP без заголовка в формат, используемый в игре (учитывая, что это только два отличия). Я обрисую в общих чертах процесс / использование псевдокода, поскольку в вашем вопросе нет языкового тега:

  • Считайте весь массив BMP в память (192 x 107).
  • Создайте новый массив, который может содержать выходные данные (190 х 107)
  • Зациклить строки в оригинале
    • Для каждой строки скопируйте первые 190 байтов (пропустите 2 байта заполнения)
    • Сохраните эти байты в новый массив, но заполните с конца
  • Записать полученные байты на диск

(Я могу написать выше на Java, если вам это поможет).

Другие вопросы по тегам