# SGDK
Установка как здесь https://github.com/Stephane-D/SGDK/wiki/SGDK-Installation. После обновления SGDK стоит всегда запускать build_lib.bat для сборки библиотек lib\libmd.a и lib\libmd_debug.a.
Для последней версии SGDK скачать репозиторий (https://github.com/Stephane-D/SGDK, Code > Download ZIP и запуск build_lib.bat), но, кроме исправлений, там могут быть проблемы (например, у меня сейчас не происходит сборка релизного рома, только в debug режиме).
Я использую GDK_WIN из переменных среды как путь к SGDK, поэтому в переменные среды нужно добавить GDK_WIN с путём вида C:\sgdk.
Информации на wiki мало, полезнее посмотреть код примеров в sample. Документация по функциям в sgdk\doc\index.html. Чтобы разобраться лучше и написать свои версии функций, придётся смотреть код реализации в src. При обновлении SGDK часто происходит переименовывание функций и констант, тогда нужно адаптировать код, в чём помогут доки и примеры.

# Сборка кода в SGDK
В папке проекта src, inc, res, out (https://github.com/Stephane-D/SGDK/wiki/SGDK-Usage). В inc заголовочные файлые .h. В res ресурсы и описываются они в .res файлах, для каждого там генерируется .h, чтобы обращаться в коде. В src код .c, там генерируется папка boot один раз и после обновления sgdk её нужно удалять, иначе будет ошибка, в ней rom_head.c где можно изменить данные заголовка рома. В out временные файлы после сборки и сам ром.
Для сборки рома нужно выполнить в командной строке, находясь в папке проекта:
%GDK_WIN%\bin\make -f %GDK_WIN%\makefile.gen
Если не указывать GDK_WIN в переменных среды, то вместо %GDK_WIN% должен быть путь до SGDK.
Если ресурсы изменились или были изменения в .h файле, то сборщик будет использовать старые данные из out и будет ошибка и неверное поведение, тогда перед сборкой нужно очистить вызовом:
%GDK_WIN%\bin\make -f %GDK_WIN%\makefile.gen clean
Также можно просто удалить папку out. Если файлы проекта добавлялись, удалялись, у них менялись имена, то после очистки останутся файлы, так что периодически стоит удалять out для экономии места.
Проще всего написать команды выше в .bat файл чтобы делать сборку его запуском.

# Использование моего проекта
Я использовал https://github.com/Stephane-D/SGDK/releases/tag/v1.80 (стабильная).
Нужно установить Python 3 и Pillow, об этом ниже.
Вам только нужно добавить в images любые картинки PNG, JPEG (или другие форматы, которые поддерживает Pillow), музыку сохранить в res\music.wav (обычный WAV), запустить full_build.bat или full_build_8000hz.bat (для музыки с частотой 8000Гц), в конце будет ----END---- и можно закрыть окно. В full_build.bat происходит вызов generate_resources.py, очистка и сборка. От больших данных ром превысит 4МБ, но ошибки не будет, поэтому нужно самому проверять размер (не больше 4 194 304 байт).
Изображения лучше не называть 1, 2, ..., 10, 11, 12, потому что в Windows по порядку, но Python использует обычный лексикографический порядок (1, 10, 11, 12, ..., 2, ...). Для правильного порядка добавлять нули 001, 002, ..., 010, ..., 100, ..., если не больше 999 изображений. Порядок можно проверить в res\gfx, я называю 0000, 0001, ... .
Другие файлы build_project.bat, clean_project.bat для сборки и очистки, при использовании full_build.bat не нужны.
Запуск скрипта generate_resources.py (кликом или через командную строку) сохранит картинки из images в res\gfx, при этом уменьшит с добавлением чёрных полос и уменьшением цветов до 16, сгенерирует файлы res\resources.res, inc\images.h, src\images.c. Запуск generate_resources.py с добавлением любого аргумента (можно перетащить любой файл на скрипт) сделает тоже самое, но сгенерирует настройки для WAV с частотой 8000Гц (качество самое плохое и маленький размер), иначе ADPCM с неплохим звуком.
Используется быстрое сжатие без потерь FAST (в resources.res), если использовать лучшее BEST, будет долгое переключение (1 секунда). Для BEST в скрипте generate_resources.py заменить fw.write(f'IMAGE image_{i:04} "gfx/{i:04}.png" FAST\n') на fw.write(f'IMAGE image_{i:04} "gfx/{i:04}.png" BEST\n').

# Качество изображений
Изображения уменьшаются с помощью Pillow, а уменьшение цветов (квантование/quantization) будет им, если в папке нет TruePNG.exe, который по-другому это делает. В обоих случаях можно указать другие настройки (я не использовал dithering, у Pillow алгоритм по умолчанию). Автоматический результат мне всё равно не нравится, но TruePNG хорош, когда нужно уменьшать цвета с полупрозрачностью. TruePNG здесь http://x128.ho.ua/pngutils.html, может понравится.
Для получения качественных изображений нужно вручную обрезать до 320x224 (добавить однотонный фон, если нужно) и уменьшать цвета вручную через http://x128.ho.ua/color-quantizer.html (рекомендую) или Photoshop. В Color quantizer (после уменьшения или можно там) выбрать 16 вместо True Color, ниже ползунок приоритета градиента и цветов (после изменения нажать OK), справа от OK вызов расширенных настроек, где можно настроить Dithering (применятся сразу), настройки Advanced применяются после нажатия Apply.

# Установка Python 3 и Pillow (PIL)
1. Установить последний Python 3. Перед этим желательно удалить другие версии Python (минорные версии не обновляются, т. е. 3.9 -> 3.10, но обновится 3.10.1 -> 3.10.2), выбрать Customize installation, все галки стоят уже, потом в Advanced Options добавить Install for all users и Add Python to environment variables. Можно не делать "Install for all users", но он тогда поставит для текущего пользователя далеко (если не выбрать свой путь). "Add Python to environment variables" нужно чтобы были доступны Python и PIP из консоли везде, это не нужно ставить, если вам вдруг нужны другие версии Python, но всегда можно добавить пути до нужной версии через переменные среды в переменную Path, например: C:\Program Files\Python310\ и C:\Program Files\Python310\Scripts\.
2. Обновление PIP (установщик пакетов) нужно периодически делать, через командную строку от администратора (!):
python.exe -m pip install -U pip
Он напишет, что есть обновление, когда будет установка/обновление любого пакета.
3. Для установки/обновления Pillow, через командную строку от администратора (!):
pip install -U pillow
Если вдруг что-то было установлено не от администратора, можно удалить через pip uninstall ИМЯ_ПАКЕТА.
