zx7 etc...
Когда писал код движка, рассчитывал на то что игра будет только в snap-версиях, все же 2018 год, 21й век, эмуляторы спектрума сейчас где угодно есть… Поэтому если в игре настала смерть главного героя или он попал в безвыходное положение ( о чем игра любезно умолчит ), подразумевалось что игрок заново тыкает в файл “cell3326.sna” и эмулятор за секунду загружает новую игру.
Никогда бы не подумал что игру захотят запустить на реале, но внезапно поступил запрос на tap-версию.
Ок. Первая версия tap формируемая исключительно sjasmplus почему-то не захотела корректно загружаться в эмуляторах без включенной опции ускоренной загрузки, пришлось задействовать утилиту bin2tap.
Тут всплыло 2 нюанса:
- грузить игру через tap без сжатия несколько медленно и не круто
- после смерти главного героя для повторного прохождения игры приходится снова загружать tap
Пришлось разделить игру на 3 части:
- собственно скриптовый движок
- статические данные ( скрипты, описание предметов)
- изменяемые данные (карта уровня, начальные параметры предметов и героев)
Таким образом после первоначальной загрузки всех частей при последующем рестарте придется загрузить только изменяемые данные.
На данный момент игра не предусматривает загрузки уровней с различными предметами, поэтому движок и статические данные объединил в одну секцию…
Посмотрел как сжимает 7zx - сжимает отлично, повезло что в память 48к умещалась вся игра как в запакованном так и в распакованном виде ( карта 32x32 в демо-версии заполнена в основном нулями, массив описания предметов тоже ), это значит не нужно переходить на 128к или перемещать данные с места на место после распаковки.
В итоге код в памяти выглядит так:
[ движок+статические данные ]
[ динамические данные ]
[ сжатые динамические данные ]
[ сжатые статические данные ]
[ распаковщик ]
Две последние секции понадобятся только один раз - при первоначальном запуске распаковщика, который распакует статические данные и передаст управление на движок…
Перешел с Atom на VisualStudio Code. VSC позволяет организовать сборку через запуск зависимых тасков в файле tasks.json - клевый тулчейн для сборки, все почти по-взрослому :)
- “parts.asm”: sjasmplus компилит игру и сохраняет в виде файлов статическую (static.bin) и динамическую (dynamic.bin) части
- “zx7”: архиватор zx7 сжимает бинарные файлы в static.bin.zx7, dynamic.bin.zx7
- “one.asm”: sjasmplus сохраняет на диск сжатые данные + распаковщик в виде файла game.bin, выводя в консоль сборки данные об адресе начала файла в памяти(BINARY BEGIN), его длине (BINARY SIZE) и адресе запуска распаковщика (BINARY START)
- к сожалению ручная правка параметров из предыдущей задачи в строке запуска задачи make_tape (пока не научился автоматически передавать параметры из одной задачи в другую, на bash-скрипты завязываться не хочу)
- “make_tape:” запуск утилиты bin2tap для сборки tap-файла.
Добавил в начало движка инициализацию игры ( обнуление переменных, распаковка динамических данных ) и сделал в скрипте game_over переход на начало после нажатия any key. Как-то так…