Для начала нужно скачать демки вместе с оригинальной, Андрувской, версией zengl -
http://zengl.org/download_ru.htmlТам же, на форуме можно найти и кое-какие проекты использующие зенгл. После изучения демок, нужно скачать мой тестовый проект использующий zengl_fork - последнюю версию новеллотыка -
https://sourceforge.net/projects/novellotyk/files/Новеллотык представляет собой минимальный образец программы позволяющей написать визуальную новеллу с хранением данных в процедурах, при этом выбор для запуска процедуры с данными зависит от ключа. Скриптовая абстракция к процедурам не приделана. Упор сделан на возможности впихнуть в программу максимум фич и возможности их протестить. Приделан в главном потоке гуй написанный на лазарусе, есть сохранение и загрузка глобальных переменных - всё это можно использовать не только для новелл, а для чего угодно.
Программа на зенгл запускает в цикле код дописываемый программистом в регистрируемые при инициализации движка процедуры draw и timer. В timer можно разместить вывод fps в заголовке экрана, кое-какие мелочи, а всё остальное пишется в draw. Процедура draw вызывается каждый кадр, соответственно в неё вписываются процедуры управляющие отрисовкой всего на экране, различные счётчики, в простейшем случае туда же вписывается и процедура обрабатывающая логику. Поскольку draw дёргает рисовальные процедуры каждый раз, а картинка по экрану летит с меньшей скоростью, то необходимо писать обработчик полёта хреновин по экрану. Например, для прямолинейного движения нужно сохранить время вылета, лимит времени на полёт, координаты вылета, координаты прилёта, скорости полёта по осям x и y. И тогда в следующем кадре из текущего времени вычитается время вылета и умножается на скорость, получается количество пикселей на которые сместился объект на экране. Когда объект долетит или перелетит прописанные при вылете координаты прилёта, или израсходует выделенный лимит времени (время нужно проверять в первую очередь, потому что например за год объект может так далеко улететь, что в переменных места для записи не хватит), ему прописываются финальные координаты, полёт закончен. Но это ещё не всё. Случалось что объект летел прямо в противоположную сторону, а лимита времени на полёт не было выделено, и поэтому до финальных координат не долетал! Где-то вводимые в полётное задание данные бились, я так предполагаю. Поскольку от такой лажи гарантированно защититься малореально, то при полёте необходимо проверять, не залетел ли объект в другую сторону. И если залетел, то рывком телепортировать его в пункт прибытия и делать окончание полёта, что проще всего, или же исправлять его полётные данные.
Ещё о движке можно сказать, что надо переделывать типы данных в которых в памяти хранятся ресурсы. Там были использованы массивы, данные в которых хранятся за их пределами
Посему нужно поднять минимальную версию fpc до 3.0.2 и заменить эти массивы на rawbytestring, без выхода за предел диапазона. Фактически сейчас в движке по тихому работает свой менеджер памяти, который не очень дружит со своими коллегами, из-за чего чистый выход из движка не всегда возможен и тогда (а можно это и всегда делать, чтобы не гадать побилась память или нет) при повторном запуске движка приходится по тихому перезапускать всю программу. Благо, технология сохранения глобальных переменных позволяет продолжить с нужного места. Мне этим пока заниматься некогда, но что в движке нужно править в первую очередь описал, авось кто и сделает