Модное
В новом движке, который вечно рефакторится, делал небольшую реорганизацию описания ячеек.
Субрепозиторий
С самого начала полного рефакторинга старого движка хотел сделать “по уму” - поэтому базовые вещи (работа с памятью, печать текста, очищение экрана, обрабокта клавиатуры) в виде кодов и макросов вынесены в отдельный репозиторий zx-core
. Организация в котором мне тоже не очень нравится и в нем тоже периодически все менятся - каталоги, названия файлов, одни файлы разделяются на несколько, другие объединяются…
Описание обьектов
В отличие от прежней реализации где описание обьекта находилось путем умножения номера спрайта на размер структуры, в новом движке это разбито на таблицу Спрайт-Обьект и область памяти в которой лежат описания обьектов. Спрайт-Обьект хранит прямой указатель на описание структуры, поэтому чтобы найти указатель на описание по номеру спрайта надо умножить номер спрайта на два и прибавить адрес начала таблицы Спрайт-Обьект.
Для начала пара макросов:
DEFINE_SPR_CELL НомерСпрайта Указатель
- заполняет таблицу Спрайт-Обьект указателем на структуру описания обьекта.
SET_CELL_TYPE ИмяОбьекта УказательНаТекстОписанияОбьекта УказательНаТаблицуРеакций
- создает структуру на которую можно адресоваться по переменной ИмяОбьекта
. В ней хранятся указатели на текстовое описание обьекта (выводится когда игрок смотрит на него) и указатель на таблицу действие-реакция. В дальнейшем структуру можно расширять, вводить различные параметры обьектов - вес, обьем, прочность, итп…
Grass_17.spr equ 17
Grass_158.spr equ 158
DEFINE_SPR_CELL Grass_17.spr, Grass_cell
DEFINE_SPR_CELL Grass_158.spr, Grass_cell
...
SET_CELL_TYPE Grass_cell, Grass_cell_name, Floor_actions
Таким образом спрайты номер 17 и 158 (Grass_17, Grass_158) отражают в сущности один и тот же обьект (трава разного цвета), обработка взаимодействий с ними будет идентична, так как в таблице указателей Спрайт-Обьект указатели номер 17 и номер 158 указывают на одно и то же описание обьекта Grass_cell
Отладочный код
Добавил небольшой отладочный код, который показывает номер ячейки в десятичном и шестнадцатеричном виде (код c некоторой переработкой взят отсюда) если описание ячейки в таблице Спрайт-Обьект отсутствует.
cell3326
]