Модное

В новом движке, который вечно рефакторится, делал небольшую реорганизацию описания ячеек.

Субрепозиторий

С самого начала полного рефакторинга старого движка хотел сделать “по уму” - поэтому базовые вещи (работа с памятью, печать текста, очищение экрана, обрабокта клавиатуры) в виде кодов и макросов вынесены в отдельный репозиторий 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 некоторой переработкой взят отсюда) если описание ячейки в таблице Спрайт-Обьект отсутствует.

Картинка

Written on February 19, 2024
[ cell3326  ]