Тут такое дело, что в какие-то незапамятные времена, я долго парился с этими GIM-ами и MIG-ами. Точно не помню, но вроде файлы с хедером GIM почему-то не работали на PSP.
Собсно по этому поводу есть несколько темок на форуме. Нашёл парочку тем, там разбросаны по постам архивы со всякими причиндалами по поводу GIM, возможно тебе может что-то пригодиться:
- https://www.pspx.ru/forum/showthread.php?t=91140
- https://www.pspx.ru/forum/showthread.php?t=96493
Почему я написал про опцию
-L? Потому что это очень важно, щас объясню почему...
Короче, в игре "
Ever17 -the out of infinity- Premium Edition" в исполняемом файле
PSP_GAME\SYSDIR\EBOOT.BIN(BOOT.BIN) внутри лежат 2 картинки - ICON0.PNG и PIC1.PNG, а следом лежит файл
nowloading.tm2 - это есть
GIM-файл.
Эти ресурсы я положил в
архив во вложении, по их хекс-атрибутам ты их найдёшь в EBOOT.BIN. А файлы *.gis нужно смотреть в текстовом редакторе, там записывается вся служебная информация о конвертации.
Вот так выглядет заголовок и конец MIG-файла в игре, как и должен быть выглядеть (название файла видно в конечной части файла):
Но дело в том, что когда мы прогоняем картинку
PNG через
GimConv.exe, то получаем несколько иной файл:
Здесь в конце файла нет названия и прочих технических данных. Чтобы они появились, нужно в
GimConv.cfg выставить переключатель
off на
on в этом месте:
update_fileinfo = on // default off on
Но самое важное в том, что у нас заголовок файла отличается от оригинала. Если ты невнимательно разглядывал скрины, то вот так заголовки будет более наглядно сравнить:
- MIG.00.1PSP (оригинал)
- .GIM1.00.PSP (сконверченный в GimConv.exe)
Получается мы получаем
GIM, хотя нам нужен
MIG 
Если внимательно приглядеться, то фокус заключается в том, что надпись просто перевёрнута задом наперёд. То есть, в u32 (каждые 4 байта по 8 бит) байты нужно переворачивать в Little Endian вместо Big Endian.
Поэтому я и предупреждал, что нужно в
GimConv.cfg вписать следующий код:
option -L {
format_endian = little
}
И при конвертации PNG в GIM обязательно использовать опцию
-L
Но есть ещё проблема... Например в этом GIM содержится надпись "
New Loading". Если её перерисовать по-русски "
Загрузка", а потом обратно сконвертировать в GIM, то этот gim получается размером большим, чем оригинал и следовательно не поместится на своё место в файле.
Как же регулировать размер выходного GIM?
Тут есть ещё один секрет. Размер можно регулировать количеством цветов в палитре, что влияет на количество битов на пиксель. Я тут нарисовал несколько нужных опций, которые нужно добавить опять же в конфиг
GimConv.cfg:
option -bpp16p {
image_format = rgba5650
}
option -bpp16 {
image_format = rgba5551
}
option -bpp16a {
image_format = rgba4444
}
option -bpp32 {
image_format = rgba8888
}
option -bpp4i {
image_format = index4
}
option -bpp8i {
image_format = index8
}
option -bpp16i {
image_format = index16
}
option -bpp32i {
image_format = index32
}
option -bpp1 {
image_format = dxt1
}
option -bpp3 {
image_format = dxt3
}
option -bpp5 {
image_format = dxt5
}
option -bpp1e {
image_format = dxt1ext
}
option -bpp3e {
image_format = dxt3ext
}
option -bpp5e {
image_format = dxt5ext
}
Таким образом у нас появится возможность управлять всевозможными опциями. Разложу по полочкам эти опции:
- Формат RGBA
-bpp16p = rgba5650 [0000]
-bpp16 = rgba5551 [0001]
-bpp16a = rgba4444 [0002]
-bpp32 = rgba8888 [0003]
- Индексированные цвета (исходная картинка PNG должна быть сохранена в индексированных цветах)
-bpp4i = index4 [0004]
-bpp8i = index8 [0005]
-bpp16i = index16 [0006]
-bpp32i = index32 [0007]
- Формат dxt
-bpp1 = dxt1 [0008]
-bpp3 = dxt3 [0009]
-bpp5 = dxt5 [000A]
- Формат dxt-ext
-bpp1e = dxt1ext [0108]
-bpp3e = dxt3ext [0109]
-bpp5e = dxt5ext [010A]
То есть, здесь первый столбец, например
-bpp32 - это опция командной строки.
Следующий столбец =
rgba8888 - это та цветовая функция, которую выполняет наша опция.
Третий столбец я указал в скобках
[0003] - это разгадка этой функции, с помощью которой сконвертирован GIM-файл. Этот числовой код всегда записывается в заголовке файла, в позиции
0x44. Например, если посмотреть на скриншоты хекса выше, то можно догадаться, что оригинальный GIM-файл
nowloading.tm2 был сконвертирован в формате
index8 (индексированные цвета 8 бит на пиксел). Именно поэтому я конвертировал свою картинку именно в таком же формате, как видно в позиции
0x44 стоит код
[0005] (записано задом наперёд Little Endian).
Таким образом, командная строка будет выглядеть вот так:
gimconv -L -bpp8i index.png
Подставляя нужный -bpp, можно регулировать размер выходного GIM-файла.
Вот такой у меня получился новый
GIMMIG-файл (правда на 2 байта больше оригинала):
На этом FAQ заканчиваю.